造成內存泄漏的代碼如下:
相信大家都能看出來,寫了些僞代碼
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//todo 這裏做一些事情。。。
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(3000);
Message msg = new Message();
msg.what = 3;
handler.sendMessage(msg);
}
}).start();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
這種情況下,當你退出軟件的時候,線程在執行,還持有activity的引用,會造成內存泄漏
解決代碼:不是弱飲用,大家參考一下,
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//todo 這裏做一些事情。。。
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(3000);
Message msg = new Message();
msg.what = 3;
//這裏是修改點
if (handler != null){
handler.sendMessage(msg);
}
}
}).start();
}
@Override
protected void onDestroy() {
super.onDestroy();
//注意這裏是修改點
handler.removeCallbacksAndMessages(null);
handler = null;
//第二種寫法 把message 全局變量
//message.recycle();
}
爲什麼這樣寫呢?