0 0

一个关于Android程序退出后,线程停止的问题10

在Android的程序中,UI线程是主线程
理论上来讲,Activity调用了finish方法后,主线程就终止了
那么其上的子线程也应该是停止

但是通过测试,发现并不是这样
finish退出程序后,子线程还在后台跑
必须用DDMS停止该线程才行

那么如何在程序退出时,停止所有开启的子线程呢?
我想到了两个方案:

一,在退出时,改变线程内循环的标识符
while(isRun){...}
将isRun置为false,则打破了循环,线程终止

二,不采用while(isRun){...}这样的循环方式
而利用Android提供的Handler机制来完成
//将一个线程立即加入线程队列,并执行它的[color=red]run[/color]方法
handler.post(test);

Runnable test = new Runnable(){
  public void run(){
    //以上代码略
    //延迟1000毫秒,执行这个线程的[color=red]run[/color]方法
    handler.postDelayed(test,1000);
  }
}

//退出时
//即从线程队列中移除该线程,不再被执行
handler.removeCallbacks(test);

如红字标注,确实是调用的run方法,所以其实并未真正的启动一个子线程

以上是我想到的两个方案,不知对不对
请大家来探讨一下
问题补充
原来我的理解不对
楼上兄台能否指点一二
在下感激不尽
问题补充
原来如此
谢谢指教
2011年6月17日 09:17

8个答案 按时间排序 按投票排序

0 0

system.exit(0),这个应该可以

2011年6月24日 09:15
0 0

可以用HandlerThread,将它的Looper给handler就可以,具体用法如下:
HandlerThread handlerThread=new HandlerThread("threadTag");
handlerThread.start();
Handler handler=new Handler(handlerThread.getLooper());
handler.post(test);
这样test不会阻塞ui线程

在activity的onDestroy()方法中handler.removeCallbacks(test)

2011年6月21日 16:03
0 0

这个问题也一直困扰着我,也一直没有找到解决的办法。结果,只能用线程池来解决。不知道那位高手有好的方法,不吝赐教。

2011年6月17日 09:17
0 0

调用android.os.Process.killProcess(android.os.Process.myPid())这个会杀死进程!

2011年6月17日 09:17
0 0

activity finish之后,子线程还是会运行,除非你在destory是显示将标志位置为false,还有一种情况,当系统内存吃紧,系统回收掉你的线程。

2011年6月17日 09:17
0 0

系统已经很好的封装了一些类,是你没有太注意吧。

HandlerThread

Looper.myLooper().quit()

Thread.join()

自己去查查,就能解决线程的安全退出。
当然,某个耗时的任务,还是得用标志之类的办法让他中途停下来。

2011年6月17日 09:17
0 0

finish 系统并不回收该进程...附带线程没被回收.
等系统需要资源再进行关闭.
也会跟着被回收.

2011年6月17日 09:17
0 0

引用
Activity调用了finish方法后,主线程就终止了

这个说法是不对的。

引用
那么其上的子线程也应该是停止

这个说法也不对。即使主线程终止,非deamon的子线程也不会终止。

2011年6月17日 09:17

相关推荐

Global site tag (gtag.js) - Google Analytics