oom(4)LeakCanary和eventbus的使用总结
来源:互联网 发布:冰川网络客服 编辑:程序博客网 时间:2024/06/10 01:33
参考链接: http://www.jianshu.com/p/0049e9b344b0
参考链接: https://corner.squareup.com/2015/05/leak-canary.html
参考1:http://www.cnblogs.com/androidsuperman/p/0bdb7806bd5ff9c3edbdef9a913eae6f.html
参考2:http://m.blog.csdn.net/article/details?id=50521600
eclispe版LeakCanary下载:http://download.csdn.net/detail/liudehuaii18/8756841
android studio版 LeakCanary下载:https://github.com/liaohuqiu/leakcanary-demo
中文文档:http://www.liaohuqiu.net/cn/posts/leak-canary-read-me/
Why:http://www.liaohuqiu.net/cn/posts/leak-canary/
bitmap直接放到内存也可能直接引起OOM,这时候我们就不能说是内存泄露导致的OOM了,常见的引起OOM的原因大概有以下几种:
1,bitmap太大或者bitmap用完没有回收
2,数据库的cursor没有关闭
3.构造adapter时,没有使用缓存contentview
4,死循环或者递归
除此之外,还有下面错误示例:public classSaveDate {private static SaveDate SAVEDATE;//上下文privateContextcon;static SharedPreferencessharedPreferences;private SaveDate(Context con) {this.con= con;} /*** * 得到一个单例对象***/public staticSaveDate getInstence(Context con) {if (SAVEDATE==null) {SAVEDATE = new SaveDate(con);}if (sharedPreferences==null) {sharedPreferences = con.getSharedPreferences("saveDate", Context.MODE_WORLD_WRITEABLE);}return SAVEDATE;}}
使用eventbus传递消息,是可以避免一些自己代码中的内存泄漏,使用方法
参见:http://blog.csdn.net/harvic880925/article/details/40660137
public class MainActivity extends Activity {Button btn;TextView tv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);EventBus.getDefault().register(this);btn = (Button) findViewById(R.id.btn_try);tv = (TextView)findViewById(R.id.tv); btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent(getApplicationContext(),SecondActivity.class);startActivity(intent);}});}public void onEventMainThread(FirstEvent event) {String msg = "onEventMainThread收到了消息:" + event.getMsg();Log.d("harvic", msg);tv.setText(msg);Toast.makeText(this, msg, Toast.LENGTH_LONG).show();}@Overrideprotected void onDestroy(){super.onDestroy();EventBus.getDefault().unregister(this);}}
public class SecondActivity extends Activity {private Button btn_FirstEvent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);btn_FirstEvent = (Button) findViewById(R.id.btn_first_event);btn_FirstEvent.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubEventBus.getDefault().post(new FirstEvent("FirstEvent btn clicked"));}});}}
public class FirstEvent {private String mMsg;public FirstEvent(String msg) {// TODO Auto-generated constructor stubmMsg = msg;}public String getMsg(){return mMsg;}}
- oom(4)LeakCanary和eventbus的使用总结
- LeakCanary:检测所有的oom
- EventBus的使用总结
- EventBus的使用和学习
- EventBus的详解和使用
- EventBus的理解和使用
- EventBus 的基本概念和使用
- LeakCanary的使用
- LeakCanary的使用
- LeakCanary的使用
- LeakCanary的使用
- LeakCanary的使用
- LeakCanary的简单使用
- LeakCanary的使用
- LeakCanary的使用
- Leakcanary 检查OOM
- 检测OOM之LeakCanary
- LeakCanary Android 和 Java 内存泄露检测 ,OOM检测
- 第九篇
- 阿里云配置tomacat
- Maven配置文件pom.xml详解
- mac快捷键操作
- POJ-1850-Code-组合数学
- oom(4)LeakCanary和eventbus的使用总结
- 【Android实测】取系统信息
- The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDat
- jersey框架发送图片到另一台服务器
- 小程序
- SoapUI用groovy脚本提取json数组数据
- extern "c"用法解析
- PHP判断当前是否utf-8
- Android 常用参考文档