我看了文章How to Leak a Context: Handlers & Inner Classes,現在我有一個問題。如果我將mHandler
作爲參數傳遞給另一個線程以將消息從該線程發送到主線程,是否會導致內存泄漏?如何泄漏上下文。 MyHandler的一個實例是否會導致泄漏?
SampleActivity
public class SampleActivity extends Activity {
/**
* Instances of static inner classes do not hold an implicit reference to
* their outer class.
*/
private static class MyHandler extends Handler {
private final WeakReference<SampleActivity> mActivity;
public MyHandler(SampleActivity activity) {
mActivity = new WeakReference<SampleActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
SampleActivity activity = mActivity.get();
if (activity != null) {
// ...
}
}
}
private final MyHandler mHandler = new MyHandler(this);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Run a thread (authentication, synchronization, etc.)
// Later the user might press the Home button, the Back button, or make a call
new MyThread(mHandler).start();
}
}
MyThread的
public class MyThread extends Thread {
private final Handler handler;
public MyThread(Handler handler) {
this.handler = handler;
}
@Override
public void run() {
// A long operation
// I'm done
handler.sendEmptyMessage(1);
}
}
此鏈接可能會有所幫助 - http://stackoverflow.com/questions/11278875/handlers-and-memory-leaks-in-android#11336822 – fada21 2014-09-11 11:17:27
@ fada21,no。這就是我開始的。我的問題和答案之間的唯一區別在於http://stackoverflow.com/questions/11278875/handlers-and-memory-leaks-in-android#11336822它使用片段而不是活動。 – 2014-09-11 11:28:47