博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中声名Handler变量的内存泄露问题
阅读量:6408 次
发布时间:2019-06-23

本文共 1296 字,大约阅读时间需要 4 分钟。

hot3.png

##This Handler class should be static or leaks might occur 有如下代码:

public class MainActivity extends AppCompatActivity {    private Handler handler = new Handler(){        //其他代码省略    };    //其他代码省略}

会提示如下信息:

Since this Handler is declared as an inner class, it may prevent the outer class from being garbage collected. If the Handler is using a Looper or MessageQueue for a thread other than the main thread, then there is no issue. If the Handler is using the Looper or MessageQueue of the main thread, you need to fix your Handler declaration, as follows: Declare the Handler as a static class; In the outer class, instantiate a WeakReference to the outer class and pass this object to your Handler when you instantiate the Handler; Make all references to members of the outer class using the WeakReference object.

##解决办法

static class IncomingHandler extends Handler {    private final WeakReference
mService; IncomingHandler(UDPListenerService service) { mService = new WeakReference
(service); } @Override public void handleMessage(Message msg) { UDPListenerService service = mService.get(); if (service != null) { service.handleMessage(msg); } }}

##参考

转载于:https://my.oschina.net/neumeng/blog/541920

你可能感兴趣的文章
你不知道的JavaScript运算符
查看>>
小程序开发注意事项
查看>>
ECMAScript7规范中的instanceof操作符
查看>>
Hadoop HDFS原理分析
查看>>
【webpack4】基本配置和入门api
查看>>
Mac使用ssh公钥登录Linux
查看>>
【366天】跃迁之路——程序员高效学习方法论探索系列(实验阶段124-2018.02.06)...
查看>>
POJ3070-Fibonacci(矩阵快速幂)
查看>>
[vue插件]基于vue2.x的电商图片放大镜插件
查看>>
标准的组件结构
查看>>
vue——一个页面实现音乐播放器
查看>>
SVG 扬帆起航
查看>>
NET Core-学习笔记(二)
查看>>
职业生涯上的点点滴滴
查看>>
Linux下添加新硬盘,分区及挂载
查看>>
一起来将vscode变成私人定制笔记本
查看>>
Flutter 云音乐
查看>>
RecyclerView实现多type页面
查看>>
个人的web商城网站
查看>>
debian fcitx
查看>>