Android 优化Handler防止内存泄露
Demo描述:
Handler可能导致的内存泄露及其优化
1 关于常见的Handler的用法但是可能导致内存泄露
2 优化方式请参考BetterHandler和BetterRunnable的实现
package cc.cc;
import java.lang.ref.WeakReference;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
public class MainActivity extends Activity {
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
private void initHandler() {
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
}
};
// ......doing something
// ......doing something
// ......doing something
// 发送延迟消息
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
}
}, 1000 * 20);
}
private static class BetterHandler extends Handler{
private final WeakReference activityWeakReference;
public BetterHandler(Activity activity){
activityWeakReference=new WeakReference(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (activityWeakReference.get()!=null) {
//.....handle message
} else {
System.out.println("Activity==null");
}
}
}
//同样采用静态内部类
private static class BetterRunnable implements Runnable{
@Override
public void run() {
// ......doing something
}
}
//发送延迟消息
private void sendMessage(){
BetterHandler betterHandler=new BetterHandler(MainActivity.this);
betterHandler.postDelayed(new BetterRunnable(), 1000 * 20);
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!



