android內存泄露

##一.(非靜態)內部類引發內存泄漏的緣由(Handler) #####Activity內handler自己支持activity對象,因此在 public void handleMessage(Message msg) {}能進行view的操做,因此當發生GC時候,activity因爲handler的引用沒法釋放,進而形成內存泄露。 #####解決方案:靜態內部類+弱引用,以下: public class MainActivity extends Activity { private Handler mHandler = new MyHandler(this); public TextView textView; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); textView = new TextView(this); textView.setText("hellow"); setContentView(textView); mHandler.sendMessageDelayed(Message.obtain(), 2000); } private static class MyHandler extends Handler { private WeakReference<MainActivity> mWeakReference; public MyHandler(MainActivity activity) { mWeakReference = new WeakReference<MainActivity>(activity); } "@Override" public void handleMessage(Message msg) { MainActivity activity = mWeakReference.get(); if (activity != null) activity.textView.setText("靜態內部類的Handler"); } } "@Override" protected void onDestroy() { super.onDestroy(); if (mHandler != null) mHandler.removeCallbacksAndMessages(null); } }ide

相關文章
相關標籤/搜索