1、在Activity中使用非静态内部类时, 如果生命周期比Activity长的话会导致内存泄漏。
所以尽量使用持有Activity弱引用的静态内部类。
/**
/**
* @desc handler防止内存泄漏例子
* @info Created by LzPeng on 2019/4/19 11:40
*/
public class MainActivity extends AppCompatActivity {
private ImageView ivImg;
/**
* 匿名类的静态实例不会隐式持有他们外部类的引用
*/
private static final Runnable sRunnable = new Runnable() {
@Override
public void run() {
//
}
};
private final MyHandler mHandler = new MyHandler(this);
/**
* 静态内部类的实例不会隐式持有他们外部类的引用。
*/
private static class MyHandler extends Handler {
private final WeakReference<MainActivity> mActivity;
MyHandler(MainActivity activity) {
mActivity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
MainActivity activity = mActivity.get();
if (null != activity) {
Glide.with(activity).load(R.mipmap.ic_launcher).into(activity.ivImg);
}
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ivImg = (ImageView) findViewById(R.id.iv_img);
Glide.with(this).load("https://ss3.baidu.com/-rVXeDTa2gU2pMbgoY3K/it/u=1488861817,1113726833&fm=202").into(ivImg);
// 延时10秒钟发送一个消息.
mHandler.postDelayed(sRunnable, 10000);
mHandler.sendEmptyMessage(0);
//关闭当前界面
finish();
}
}