切换到Camera Intent时,应用程序类数据被清空

时间:2012-02-01 00:09:24

标签: android

我正在开发一个使用自定义类和其他自定义类作为成员的应用。即:

public class TopClass {
    public OtherClass1 otherClass1;
    public OtherClass2 otherClass2;
}

此数据需要可供其他几项活动使用。我一直将它存储在应用程序的主Activity中,并且能够引用它。

除非在Droid X2上运行,否则一切都很好用。在该设备上它将运行正常 - 直到调用外部Intent。切换到相机,地图或日历意图时会发生同样的事情:使用后退按钮返回应用程序后,或者在相机的情况下,“确定”按钮,应用程序将使用NPE引用“TopClass”

以下是相机调用的示例:

public void startCamera(int pos) {
    Log.v(App.DEBUG_TAG, "startCamera(slot "+pos+")");

    Intent i = new Intent("android.media.action.IMAGE_CAPTURE");
    i.putExtra(MediaStore.EXTRA_OUTPUT, getFilesDir().getAbsolutePath());
    i.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
    i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(i, pos);
}

我切换到使用Application类存储“TopCLass”,但没有变化。

使用ACRA获取堆栈跟踪和logcat,我已经开始记录活动中的每个生命周期事件,我可以看到返回到Activity时“TopClass”为空。最后一个Activity的所有局部变量仍然保持不变状态,只是'全局'数据已经无效 - 我想猜测GC。

我不能在我的设备上复制这个(Droid Incredible运行CM7 [2.3.7]),或者任何模拟器 - 甚至不是X2插件,也不能复制在我妻子的Droid X上。

我正在尝试一个实验,我将“全局”“TopClass”复制到本地“TopClass”变量,但是还没有听说过它是否有效。

我的问题是:

  1. 保留此数据的正确或推荐方法是什么?从我的阅读中我收集到它是使用Application类实例,但这不起作用。

  2. 为什么X2在调用外部Intent时将应用程序拥有的类归零?

1 个答案:

答案 0 :(得分:1)

  

保留此数据的正确或推荐方法是什么?

您将数据保留在文件中。无论是数据库,SharedPreferences还是您自己设计的文件都取决于您。

  

在调用外部Intent时,为什么X2将应用程序拥有的类归零?

最有可能的是,它不是“归零应用程序拥有的类”。相反,您的流程正在终止。只要您不在前台,您的进程可能会被终止以释放其他进程的内存,无论您是因为您启动了第三方活动,还是用户按下了HOME,或者用户提出了最近的任务列表并导航到另一个任务,或者用户接到电话,等等。 X2可能比其他设备更加积极地消除后台进程,无论是专门设计还是摩托罗拉做出的其他决策的副作用。