android+版本升级的时候会清楚数据马,android主进程销毁了,线程会不会也销毁?...

Android Activity 销毁后子线程会不会被GC回收

曾想当然地认为页面被finish之后线程会被android 虚拟机的垃圾回收机制回收掉。

于是用页面跳转做测试

测试代码cefd806091a7b7085cc99e4fe26c5e1f.png

结果有点意外,页面被销毁后定时器依然在执行。退出应用定时器还在执行。

UI线程被结束掉,UI线程里面的子线程并没有被GC

问题来了,应该如何主动销毁呢

1、通过线程

Hanlder是线程与Activity通信的桥梁,利用handler接收到任务线程,放到任务队列里面派对执行。//调用该任务线程的run() 方法执行任务线程。Handler updateBarHandler =new handler();handler.post(Runnable Thread);//移除handler里的任务线程,调用线程的stop()方法,销毁线程。handler.removecallbacks(Runnable Thread);

2、通过Timer

通过以下四种方法终止一个timer线程:

a)调用timer的cancle方法。可以从程序的任何地方调用此方法,甚至在一个timer task的run方法里;

b)让timer线程成为一个daemon线程(可以在创建timer时使用new Timer(true)达到这个目地),这样当程序只有daemon线程的时候,它就会自动终止运行;

c)当timer相关的所有task执行完毕以后,删除所有此timer对象的引用(置成null),这样timer线程也会终止;

d)调用System.exit方法,使整个程序(所有线程)终止。 Android基于Linux内核开发,其进程调度相关方面和Linux保持一致。主进程销毁后,其中的线程会被内核执行销毁流程,并回收资源,但是子进程并不会。因为线程使用的是主进程进程空间,进程空间销毁意味着线程随之销毁;子进程拥有独立进程空间,如果销毁父进程,子进程会被初始进程接管成为继父进程。

发表评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值