在Service中建立socket,avtivity結束時會中斷socket求解

aa4life 发布于 2014/07/16 13:35
阅读 303
收藏 0

我在service中的代碼如下

public class AlarmListeningService extends Service{
public static final String sHost = "*.*.*.*";
public static final int sPort = 5566;
Thread thrSocket;

@SuppressWarnings("deprecation")
public void onStartCommand(Intent intent, int startId) {
    super.onStartCommand(intent, startId, startId);
    thrSocket = new thrSocket();
    thrSocket.start();
}


@Override
public IBinder onBind(Intent arg0) {
    // TODO Auto-generated method stub
    return null;
}

class thrSocket extends Thread {
    Socket mSocket;

    public void run() {

        InitSocket();

        new Thread(){  
            public void run() {
                try {
                    String msg = "";
                    while (true) {
                        int count = 0;  
                        while (count == 0) {
                             count=ips.available();
                        }
                        byte[] serverdata = new byte[count];
                        ips.read(serverdata);

                    }
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }  
            } 
        }.start();  
    }

    private void InitSocket(){
        try {
            mSocket = new Socket(sHost,sPort);
            OutputStream out=mSocket.getOutputStream();
            byte[] b_client = "client".getBytes(Charset.forName("UTF-8"));
            out.write(b_client);
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
        } catch (IOException e) {
            // TODO Auto-generated catch block
        }
    }
}
}

在Activity中的代碼如下

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

        Intent startAL = new Intent();
        startAL.setClass(MainActivity.this, AlarmListeningService.class);
        startService(startAL);
}

現在的問題是開啟activity後會啟動service

當我使用手機的多工按鍵把APP拉掉以後

在service中建立的socket卻會斷線(由socket server觀測得知)

理論上沒有stopService的話activity的存在與否不是不會影響到service嗎?

為什麼activity一關調socket就會斷開呢?

這個問題困擾我好幾天了

求網路上的各路英豪來解救小弟

謝謝!

加载中
0
obaniu
obaniu
在manifest的AlarmListeningService 的android:process 添加一个新进程名
aa4life
aa4life
知道問題了,不過就算添加了一個新的process,socket一樣會在activity從多工介面中拉掉的時候斷開耶
obaniu
obaniu
@aa4life 两个不同进程,你之前是不进程傻了。
aa4life
aa4life
添加成功了,可是現在變成server中無法使用全域變數(socket接收資料存入全域變數,寫在application裡面),這樣該怎麼解?
obaniu
obaniu
@aa4life 肯定是写错了.比如 android:process=":alarmSvr"
aa4life
aa4life
添加了之後 .APK連安裝都不能安裝耶
返回顶部
顶部