【问题标题】:Threads created on my service get killed when I close the activity当我关闭活动时,在我的服务上创建的线程被杀死
【发布时间】:2014-04-10 20:06:29
【问题描述】:

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

代码

活动

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;
}

}

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

【问题讨论】:

  • 你一定有错误。请发布您的相关代码。
  • 但是我在 Logcat 上看不到任何错误。让我把代码。
  • 请给我们看代码
  • 我遇到了类似的行为,但是我正在处理一个计划在启动时运行的后台服务,在仔细检查 logCat 后我开始知道操作系统是如何杀死我的进程的,我也尝试过将线程优先级设置为最高。这将是终止应用程序的正常消息,只需在 logCat 窗口上按 ctrl+c 并将其粘贴到文本编辑器中,然后检查它。
  • 完成!,我添加了代码。有什么建议吗?

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


【解决方案1】:

谢谢大家,终于找到解决办法了。必须使用 setForeground() 方法,我只是将这段代码添加到我的服务类中:

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

根据我的研究,这段代码是用来防止服务被自己杀死的。

最好的问候!

【讨论】:

  • 该服务永远不会杀死自己,它可以在技术上停止做它正在做的事情,然后Android会停止它。前台服务不会阻止服务被杀死,它只是大大降低了这种情况发生的机会。安全起见的代码,假设最坏的情况。
猜你喜欢
  • 1970-01-01
  • 2018-03-18
  • 1970-01-01
  • 2020-11-22
  • 2015-05-31
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
相关资源
最近更新 更多