【问题标题】:How to know if there is an Activity Instance currently living?如何知道当前是否存在活动实例?
【发布时间】:2011-12-19 22:22:17
【问题描述】:

情况:
当退出 android 应用程序的主要活动时,我希望在活动的活动实例上调用一个方法,以使它们清除数组中的数据(以便在返回应用程序时数组尚未填充)。

在 MainActivity.java 中

// ...
@Override
public void onDestroy() {       
   super.onDestroy();
   // call method to clear an array list of its data
   // NullPointerException here if OtherActivity has no current living instance
   OtherActivity.clearAllData();        
}

在 OtherActivity.java 中

// ...
private static ArrayList <String> myStringCollection;
// ...
public static void clearAllData(){
   if(myStringCollection.size() > 0){
     myStringCollection.clear();
     Log.d(TAG, "clearing data in OtherActivity");
   }

}

问题:
我们如何知道 OtherActivity 是否有当前的活动实例,以便我们可以安全地调用 OtherActivity.clearAllData() ?

代码尝试做什么:
退出应用程序并返回后,一些 ArrayLists 中仍然有旧数据,因此新数据(重复) 堆叠在顶部。这段代码尝试在主Activity的onDestroy()上清除ArrayLists中的数据,这样以后返回app时就没有旧数据了。

【问题讨论】:

    标签: java android android-activity nullpointerexception


    【解决方案1】:

    您的代码当前正在使用静态变量。静态变量附加到ClassLoader 而不是类的实际实例。这意味着您实际上不需要有效的活动实例来执行您在上面所做的事情。只需使用myStringCollection != null 之类的检查来保证您的变量已被初始化并且您应该没问题。

    注意,请说明您是否真的想访问非静态变量。

    【讨论】:

    • 感谢鬼脸的反馈。我会试试看。我正在使用类方法来调用另一个活动的方法并来回传递数据(可能不是最好的方法,但是......)
    • 我会调查SharedPreferences。这是在类之间传递数据的一种简单方法。如果您不希望数据持久化,还可以将 Extras 添加到您的 Intents 中非常有用。
    • 更新:这停止了 NullPointerException,但在应用退出后未能成功清除数组数据。问题超出了问题的范围,所以我将接受您的回答并重新考虑该方法。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多