##一.(非静态)内部类引起内存泄漏的原因(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); } }