Tho*_*alc 2 multithreading android handler oncreate
我正在我的Activity的onCreate()方法中为UI线程实例化我的Handler.(为了避免内存泄漏风险,Handler不是内部类,它是一个普通的类.)
由于一个Handler对应一个Thread,但是一个Thread可以拥有更多的处理程序(据我所知),每次调用onCreate()都会实例化一个新的Handler实例.因此,如果我的活动再次被重新创建(在onDestroy之后,但在此期间没有任何进程终止),onCreate()将添加另一个Handler而不删除旧的.(在Android源代码中,Handler只询问Thread的Looper并获取对其消息队列的引用.)
什么是最佳解决方案?我应该将一个Handler实例化为静态变量,然后在onCreate()中,我可以检查它是否为null.如果它是非空的,那么就没有必要实例化一个新的,对吧?
(不用说,在onDestroy()中,我将Handler实例中的Activity引用设置为NULL,因此Handler没有泄漏Activity或任何相关的东西 - 我的处理程序的处理方法检查它是否为null,并在需要时丢弃消息但是我的问题是Handler仍然是为了线程保留的,原因在前面的段落中我详细说明了,所以onCreate调用越多,附加到UI线程的Handler实例越多.我的静态解决方案是否正确?这并不重要,那么Android如何检测与当前线程关联的处理程序应该是GC-d?)
Thread,Looper或其他任何东西都没有引用Handler.Handler只是一种方便的方法,可以将东西放入Looper的消息队列中.
如果在onCreate()中实例化一个Handler并将其分配给活动中的成员(实例)变量,那么当您的活动被垃圾收集时,Handler也将被垃圾收集,因为没有任何引用它的东西.
因此,在onCreate()中创建Handler对象不会导致任何内存泄漏.
| 归档时间: |
|
| 查看次数: |
1946 次 |
| 最近记录: |