1

我对到处都需要活动/应用程序有一点问题......
更准确地说,我有这样定义的类:

public class MyApp extends Application {

     private static Activity currentActivity;
     private static MyApp instance;

     @Override
     public void onCreate() {
         super.onCreate();
         instance = this;
     }

     public static void setCurrentActivity(Activity activity) {
         currentActivity = activity;
     }
}

我有一个这样的扩展活动:

public class MyActivity extends Activity {

       ....

       @Override
       public void onResume() {
          super.onResume();
          MyApp.setCurrentActivity(this);
       }


       ....

       @Override
       public void onDestroy() {
          super.onDestroy();   
          MyApp.setCurrentActivity(null);  // for nullifying static reference

       }
 }

我的问题是:

  1. 上面的代码片段公平吗?
  2. 我应该super.onDestroy();在之后使用MyApp.setCurrentActivity(null);来验证活动没有成功引用和销毁吗?
  3. 最重要的是,静态引用实例呢?我在哪里可以取消它以不阻止 GC ?

谢谢。

4

1 回答 1

0
  1. 上面的代码片段公平吗?

没有。最大的问题在MyActivity.onDestroy(). 这可以在活动不再使用时(即:完成后)随时调用。如果您取消,您将不会清除对 的引用,您将清除对当前当前处于活动状态的任何活动的引用。我你真的想指出当前的活动,你能做的最好的事情是这样的:@Override public void onPause() { super.onPause(); if (MyApp.getCurrentActivity() == this) { MyApp.setCurrentActivity(null); } }currentActivityonDestroy()MyActivitycurrentActivity

onPause()另外,请注意,活动和下一个活动之间有一个小窗口,因此在此期间onResume()可能会为空。currentActivity小心那个!

我应该使用 super.onDestroy(); 在 MyApp.setCurrentActivity(null); 之后 验证活动没有成功引用和销毁?

请参阅我上面的评论。您不能在 中取消此引用onDestroy()

最重要的是,静态引用实例呢?我在哪里可以取消它以不阻止 GC ?

你不需要。created只有一个实例,MyApp只要您的进程存在,它就会一直存在。当 Android 不再需要您的进程时,它只会终止该进程,这将自动清理所有内容。

于 2012-07-17T16:34:29.613 回答