当我关闭活动时,在我的服务上创建的线程被杀死

时间:2014-03-07 15:26:37

标签: android multithreading io android-activity android-service

我创建了一个调用服务的活动,该服务创建了一个向服务器发送和接收一些数据的线程,我可以打开其他应用程序,服务和线程运行正常,但是当我关闭活动时,服务保持运行但线程停止工作。为什么???如何保持线程运行!!。

代码

活动

package com.connectus.app;

public class ConnectUsActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_connect_us);

        Intent startServiceIntent = new Intent(getApplicationContext(), ConnectUsService.class);
        startService(startServiceIntent);
}

服务

package com.connectus.app;

public class ConnectUsService extends Service {

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub

                    Thread t=new Thread(new Runnable() {

                    private DataInputStream in;
                    private BufferedReader br;
                    private DataOutputStream out;

                    @Override
                    public void run() {
                        Socket server=null;
                        try{
                            server=new Socket("10.10.40.58",4444);
                            in = new DataInputStream(server.getInputStream());
                            br=new BufferedReader(new InputStreamReader(in));
                            out = new DataOutputStream(server.getOutputStream());
                            while(true){
                                out.writeUTF("aaaaa");
                                String leido=in.readUTF();

                                out.writeUTF("asdf");
                                                                    Thread.sleep(60000);
                            }
                        }catch(IOException ioe){
                            ioe.printStackTrace();
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                });
                t.start();


    return START_STICKY;
}

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

}

这只是我代码的一部分,我希望它有所帮助。

1 个答案:

答案 0 :(得分:0)

谢谢大家,最后我找到了解决方案。使用setForeground()方法是必要的,我刚刚将此代码添加到我的服务类中:

Notification note=new Notification();
startForeground(1337, note);

根据我的研究,此代码用于防止服务被自身杀死。

最好的问候!