不能等待onPause里面的线程结论

时间:2012-11-28 08:21:04

标签: android multithreading onpause

我需要在应用程序挂起之前销毁一个线程。这是我的代码:

public class MyThread extends Thread
{
   public boolean mRun = false;;
   @Override
   public void run()
   {
        while (mRun)
        {
              .....
        }
    }
 }

的活动:

 @Override
 public void onPause() {
    if (mThread != null)
    {       
        mThread.mRun = false;           
        try { mThread.join(); }
        catch (InterruptedException e) { }
    }
    super.onPause();
}

但我很确定android系统不会等待我的线程结论并暂停我的应用程序。我怎么能强迫线程结束?

4 个答案:

答案 0 :(得分:1)

这就是我在代码中使用的方式,满足您的要求。希望,这也将对您有所帮助。如果您找到更好的解决方案,请分享。

在下面的代码段中,mThread是在onCreate中创建的主题。 OnDestroy是在您的活动被销毁之前调用的方法。它是清空已分配资源的最佳位置。

@Override
public void onDestroy() {
    super.onDestroy();
    if(null != mThread) {
        Thread dummyThread = mThread;
        mThread = null;
        dummyThread.interrupt(); // Post an interrupt request to this thread.
       }
}

干杯!

答案 1 :(得分:0)

您确定没有收到InterruptedException吗? 尝试将一个堆栈跟踪放入catch句子中......并检查你的线程是否为isive()。

答案 2 :(得分:0)

你做不到。 Thread.join是一个阻塞可能很长的操作,不能在UI线程上完成(onPause在UI线程上)。

您可以要求您的线程停止,(将mRun设置为false是一种普遍接受的方式),但您无法轻易等待它。

答案 3 :(得分:0)

可以肯定的是,将线程标记为守护进程,如果在线程中执行重复性任务,则总是检查一个标志。此外,呼叫中断,它将负责阻止IO或网络呼叫。

myThread.setDaemon(true)

cancelFlag = true;
myThread.interrupt();