职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 753|回复: 9

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

[复制链接]
愚人 发表于 2011-7-21 10:30 | 显示全部楼层 |阅读模式
在Android的程序中,UI线程是主线程
理论上来讲,Activity调用了finish方法后,主线程就终止了
那么其上的子线程也应该是停止

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

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

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

二,不采用while(isRun){...}这样的循环方式
而利用Android提供的Handler机制来完成
  
//将一个线程立即加入线程队列,并执行它的run方法   
handler.post(test);   
  
Runnable test = new Runnable(){   
  public void run(){   
    //以上代码略   
    //延迟1000毫秒,执行这个线程的run方法   
    handler.postDelayed(test,1000);   
  }   
}   
  
//退出时   
//即从线程队列中移除该线程,不再被执行   
handler.removeCallbacks(test);  

//将一个线程立即加入线程队列,并执行它的run方法
handler.post(test);

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

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

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

以上是我想到的两个方案,不知对不对
请大家来探讨一下

已经来了吗 发表于 2011-7-21 10:31 | 显示全部楼层
引用
Activity调用了finish方法后,主线程就终止了

这个说法是不对的。


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

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


北大青鸟 发表于 2011-7-21 10:31 | 显示全部楼层
原来我的理解不对
楼上兄台能否指点一二
在下感激不尽

有烟没火 发表于 2011-7-21 10:31 | 显示全部楼层
finish 系统并不回收该进程...附带线程没被回收.
等系统需要资源再进行关闭.
也会跟着被回收.

走就走吧 发表于 2011-7-21 10:31 | 显示全部楼层
系统已经很好的封装了一些类,是你没有太注意吧。

HandlerThread

Looper.myLooper().quit()

Thread.join()

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

只学java 发表于 2011-7-21 10:31 | 显示全部楼层
原来如此
谢谢指教

月上萧萧 发表于 2011-7-21 10:31 | 显示全部楼层
activity finish之后,子线程还是会运行,除非你在destory是显示将标志位置为false,还有一种情况,当系统内存吃紧,系统回收掉你的线程。

醉倚西风 发表于 2011-7-21 10:32 | 显示全部楼层
调用android.os.Process.killProcess(android.os.Process.myPid())这个会杀死进程!

曾经的小孩 发表于 2011-7-21 10:32 | 显示全部楼层
学习了 不错不错


话说我当年 发表于 2011-7-23 11:31 | 显示全部楼层
疯了.........
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-4-30 02:08 , Processed in 0.135250 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表