java - 如何知道当前是否存在 Activity 实例?

标签 java android android-activity nullpointerexception

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

在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 是否有当前的 Activity 实例,以便我们可以安全地调用 OtherActivity.clearAllData() ?

代码尝试执行的操作:
退出应用程序并返回应用程序后,某些 ArrayList 中仍然包含旧数据,因此新数据(重复的)会堆叠在顶部。此代码尝试在主 Activity 的 onDestroy() 中清除 ArrayList 中的数据,以便稍后返回应用程序时不会有旧数据。

最佳答案

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

注意,请澄清您是否确实想要访问非静态变量。

关于java - 如何知道当前是否存在 Activity 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8568375/

相关文章:

java - 使用 ConcurrentLinkedQueue 进行一些非原子操作

android - 如何在 Eclipse 中安装 Android ADT 插件?

安卓动画问题

android - 清除旧 Activity ,这样它们就不会出现在新 Activity 中点击

java - Java中转义保留的url参数

java - JTextField 不接受我的文本

java - Spring 启动,MySQL : How to do a database authentication with a hashed password?

android - 根据分辨率绘制不同大小的形状

android - 非常简单的Android地理围栏示例

java - 将来自 getCallingActivity 的 Activity 与另一个进行比较