2011-03-31 65 views
0

我有一个应用程序在遍历文件系统时创建多个活动(每个文件夹或文件一个活动,一个搜索活动等)。此应用程序有时会在[返回]时崩溃。跟踪日志表明它在onCreate(...)中崩溃,这告诉我这些活动已经被销毁,并且在返回时正在被重新创建。这是一个问题,因为当在活动堆栈中向前移动时(即正常文件夹遍历),我通过Intent传递数据。Android - 多项活动,让他们活着,并保存状态?

这里是我所得到的:

ERROR/AndroidRuntime(978):产生的原因: 显示java.lang.NullPointerException Folder.onCreate(Folder.java:155)

ERROR/AndroidRuntime (978):在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) ERROR/AndroidRuntime(978):在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)...

在像文件系统浏览器一样运行的应用程序中,处理内存,多次(甚至可能是0-100次)活动,返回等等的最佳方式是什么?

谢谢。

编辑:我想继续使用活动,如果可能的话,或找到一种方法来保持从一个活动到另一个活动的外观和感觉。如果我能够就如何最大限度地减少活动数量(例如,保存数据,关闭屏幕外活动,然后保留[后面]动画,即使被重新调用的活动需要重建)。谢谢。

回答

2

不要为每个目录遍历使用新的活动,你正在浪费TON资源。相反,有一个作为文件浏览器的活动,并保持自己的状态(当前完全限定的路径),然后当用户点击后退按钮时,将覆盖默认操作。请参阅onBackPressed()

当您的onBackPressed方法被触发时,您可以采取您的状态(完整路径)并简单地移动目录级别。

简单,高效,干净。

+0

感谢您的支持,但是我的应用程序有点复杂,目录信息是从基于云的服务加载的,文件需要打开/显示,用户需要能够搜索文件等。应用程序现在可以完成所有这些工作,但每个操作都是它自己的活动,并且活动会相互传递数据......因此,当关闭时会出现空指针。我可以使用viewflipper或类似的东西,同时保持活动 - 活动动画等?谢谢。 – RyanM 2011-04-01 00:14:47

+0

我仍然会避免使用那么多的活动。您可以将您的应用分为三个组件,目录浏览器,文件查看器和搜索。每个组件只需要一个实例,您可以通过在Intents中设置的“FLAG_ACTIVITY_CLEAR_TOP”和“FLAG_ACTIVITY_SINGLE_TOP”来实现。 – smith324 2011-04-01 02:33:10

+0

感谢您的支持,但我想保留活动过渡动画,所以我会继续使用活动。即使有很多开放的活动,我从来没有看到该应用使用超过14MB的RAM,并且SoftReference使用了所有的位图/绘图,所以我没有发现内存不足的错误。 – RyanM 2011-04-03 04:30:04