Android内部类内存泄漏和上下文泄漏?

我在启动画面中使用Handler将重定向延迟到下一个活动,如下所示。

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entrance); screenTimeOut(); } private void screenTimeOut() { /* New Handler to start the next screen * and close this Entrance after some seconds.*/ new Handler().postDelayed(new Runnable() { @Override public void run() { initTracker(); /* Create an Intent that will start the Next-Activity. */ checkLoginStatus(); } }, SPLASH_DISPLAY_LENGTH); } 

在另一个活动中,我将上下文传递给一个类,并在按钮点击下按住以下内容。

  private Tools tools; tools = new Tools(DetailsScreen.this, true); 

工具

  private Context _context; private Fragment _fragment; private Activity activity; private String filePath = null; private String camImagePath = null; public Tools() { } public Tools(Context _context, boolean flag) { this._context = _context; this.activity = (Activity) _context; initPath(); if (flag) { createImageFile(); } } 

这些中的任何一个都是泄漏的原因吗?

如何使用处理程序如下..

  private Handler mHandler = new Handler(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.entrance); screenTimeOut(); } private void screenTimeOut() { /* New Handler to start the next screen * and close this Entrance after some seconds.*/ mHandler.postDelayed(new Runnable() { @Override public void run() { initTracker(); /* Create an Intent that will start the Next-Activity. */ checkLoginStatus(); } }, SPLASH_DISPLAY_LENGTH); } @Override protected void onDestroy() { super.onDestroy(); mHandler.removeCallbacksAndMessages(null); } 

  1. 不应以匿名方式使用HandlerRunnable
  2. 您应该避免将整个活动作为参数传递给其他类。 如果您想要上下文,请使用activity.getContext()

更多信息:
http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html http://www.androiddesignpatterns.com/2013/04/activitys-threads-memory-leaks.html