android 内存泄露笔记
来源:互联网 发布:工程优化设计收费标准 编辑:程序博客网 时间:2024/05/22 12:01
首先记住这两个地址:
https://yq.aliyun.com/articles/3009
http://www.cnblogs.com/qianxudetianxia/p/3645106.html
其次,实际检测时发现一个小坑:
如果一个Activity中存在一个未使用的EditText,并且这个EditText 使用了 requestFocus,则会出现内存泄漏。
代码如下:
View viewRoot = LayoutInflater.from(this).inflate(R.layout.new_layout, null);EditText edit1 = (EditText) viewRoot.findViewById(R.id.edittext1);
<EditText android:id="@+id/edittext1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" > <span style="color:#ff0000;"><requestFocus /> <!-- 这一句导致内存泄露 --></span></EditText>
还有,实际检测遇到的一个真实问题:
//在某个view中创建一个handler,这个mHandler使用的是主线程的looper//本例的handler的作用是每隔五秒通知view做一些操作。private Handler mHandler = new Handler();//在view开始时调用startHandler,启动循环。private void startHandler(){mHandler.removeCallbacks(mRunTimeTick);mHandler.postDelayed(mRunTimeTick, 1);}//在view结束时调用stopHandler方法,清空messageQueueprivate void stopHandler(){ mHandler.removeCallbacks(mRunTimeTick);}//private Runnable mRunTimeTick = new Runnable() { @Override public void run() {//每隔五秒发一个message。//注意!!!!此处会引发内存泄漏,原因是此处的消息没有使用本例的mHandler发出,//而是使用view相关联的系统handler发出,因此,消息并不一定位于mHandler只有的messageQueue中。//这时等view结束时调用的stopHandler就无法移出消息,造成内存泄漏。//解决方法很简单,使用 mHandler.postDelayed(mRunTimeTick, 5000); postDelayed(mRunTimeTick, 5000); //做一些自己的操作 }};
0 0
- android 内存泄露笔记
- Android学习笔记之Handler内存泄露
- 内存泄露笔记
- Android 内存泄露
- android内存泄露 mat
- 预防Android内存泄露
- 预防Android内存泄露
- 预防Android内存泄露
- Android 避免内存泄露
- Android内存泄露分析
- Android内存泄露
- 避免Android内存泄露
- android 内存泄露
- Android 内存泄露测试
- 避免Android内存泄露
- android 内存泄露调试
- 避免Android内存泄露
- android内存泄露优化
- extjs 使用Ext.Ajax.request进行数据传输
- Android中内容观察者的使用---- ContentObserver类详解
- php程序员阶段
- C#基础知识之结构体(Struct)
- 对页面数据进行按某一字段排序显示
- android 内存泄露笔记
- eclipse代码注释之模板xml
- postgresql数据库对象管理之非模式对象
- 242. Valid Anagram
- C++第四次实验(求1000内所有偶数的和)
- c++实验四—分数的累加
- RGB颜色查询对照表
- Windows 任务计划执行Python程序的设置
- iOS 防止循环引用的两个方法