关于5-3教程几个问题

关于5-3教程几个问题

如教程5-3倒计时例子,有几个问题想请教下。

1.静态的内部类不会持有外部类的引用,这个Handler是静态的,当Activity被回收了,这个Handler不就不能用这个Activity里的对象(TextView)吗?

2.Activity什么情况会被回收?Activity跳转,原来的Activity会不会被回收?什么时候才算关闭Activity?

3.GC检查时,如果已经关闭了该Activity,就算后台线程还没结束(比如在下载),由于仅有一条来自Handler的弱引用指向Activity,GC会不会在检查的时候把Activity回收掉?如果回收掉了,该Handler线程要用到Activity中的某些对象能正常使用吗?

问题有点多,不好意思了,嘿嘿~

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
irista23 2017-08-06 23:46:54

1、如果Handler持有当前Activity的引用就当然也包活对象TextView,这个Activity就不会被销毁,这样会造成内存的泄漏。所以把handler定义成static教由系统来处理销毁。

2、Activity有两种销毁。

第一种是正常的销毁,比如用户按下Back按钮或者是activity自己调用了finish()方法;

另一种是由于activity处于stopped状态,并且它长期未被使用,或者前台的activity需要更多的资源,这些情况下系统就会关闭后台的进程,以恢复一些内存。

3、如果Activity还在被引用,系统就不会回收它。

  • 提问者 慕婉清9984016 #1
    那这个倒计时的Activity一直显示着,肯定不会被回收,在这里感觉无所谓内存泄漏的问题,而且 如果被回收,Handler用不了当前Activity的对象TextView,这个Handler不就用不了TextView来更新数字了吗?用弱引用当activity被回收,Handler能不能用当前Activity中的对象?
    2017-08-07 08:49:24
  • irista23 回复 提问者 慕婉清9984016 #2
    老师借以倒计时为例,其实想跟大家介绍Handler更优化的处理方法。当Activity finish,Handler又引用了这个Activity,这种引用对象方式会保持到该消息被处理完,这样就导致该Activity对象无法被回收,从而导致了上面说的 Activity泄露。解决方案就是在所有在handler里面使用的对象都变成弱引用,目的就是为了可以在Android回收内存的时候,可以直接回收掉。
    2017-08-07 10:17:14
  • 提问者 慕婉清9984016 回复 irista23 #3
    如果这个弱引用被回收了,Handler能不能用当前Activity中的对象?
    2017-08-08 08:38:15
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Android网络操作与数据存储2018版
  • 参与学习           人
  • 提交作业       307    份
  • 解答问题       1613    个

本专题是联网及数据处理的必备技能。课程从网络基础知识到线程间协同工作、异步下载处理。介绍了Android内外部文件存储、轻量级数据库SQLite的使用。利用屏幕适配、状态保持、百度地图解决实际问题。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师