0

我在android中有这个问题。我有一个主要活动用这个调用一个线程

   Runnable work = new Runnable() {

    public void run() {
        while (kill) {
            try {
                Thread.sleep(5000);
                connect();
                } catch (InterruptedException ex) {
                Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
            }
        }


    }
};

杀死它在 MainActivity 中的公共布尔值。我能做些什么来保存线程,所以当我恢复活动时我仍然可以杀死线程?

4

2 回答 2

1

为什么要杀死简历中的线程?

为什么不在 resume 部分启动线程,然后放入 finally 块来处理connect()中断的事实,然后当它再次启动时,您只需要重新连接并执行操作。

在移动设备的情况下,最好的办法是在你所在的一些持久性存储中打勾,这样如果你被打断,你可以在Activity再次启动时继续。

你很有可能被打断,所以要为它设计。

该线程可能会被操作系统杀死,因此以后没有任何东西可以保存和杀死。

如果你真的需要做这样的事情,那么开始一个RemoteService,因为它会在与你不同的进程中运行,Activity并且更有可能留下来。

你可能想看看这个问题:

安卓远程服务

于 2011-06-17T00:10:39.430 回答
0

我认为您想做一些更接近此解决方案建议的事情。

Thread但是,如果您真的Thread想继续在killMe(). 这将修改(现在是私有的)布尔kill标志。然后,在你的onRetainNonConfigurationInstance()你可以返回这个Thread,你可以在onResume. 如果您返回并且活动没有被杀死,那很好,您可以调用killMe()现有的Thread.

例子:

 @Override
  public Object onRetainNonConfigurationInstance() {
    return thread;
  }
于 2011-06-17T02:20:15.393 回答