android中handler使用应该注意的问题(解决由handler引起的OOM内存泄漏)
最近,在项目过程中频繁的使用handler处理一些ui线程上的操作,以及使用handler的postdealy。然而使用过后却不对handler进行处理,进而产生了内存溢出现象,通过google,发现了解决这一问题的方法。下面贴出项目中的相关代码
/**********************************以下代码解决了handler有可能造成的内存泄漏***************************************************/ private class MyHandler extends Handler{ //持有弱引用HandlerActivity,GC回收时会被回收掉. private final WeakReference<ReplyDetailsActivity> mActivty; public MyHandler(ReplyDetailsActivity activity){ mActivty =new WeakReference<ReplyDetailsActivity>(activity); } @Override public void handleMessage(Message msg) { ReplyDetailsActivity activity=mActivty.get(); super.handleMessage(msg); if(activity!=null){ } } } //执行相应的业务逻辑 private final Runnable myRunnable = new Runnable() { @Override public void run() { //执行我们的业务逻辑 if (sumPages>1){ for (int i = 2; i <=sumPages ; i++) { getReplyDetails(String.valueOf(i)); } } } };
在oncreate里面调用
MyHandler mHandler = new MyHandler(this); mHandler.postDelayed(myRunnable,2000);
这个解决方法的出处在这位大神的博客之中:http://blog.csdn.net/javazejian/article/details/50839443
善守者藏于九地之下, 善攻者动于九天之上