Android生命周期 - ActivityManager杀死进程 - >从后台返回时出现异常

时间:2011-05-18 15:12:34

标签: android android-activity android-lifecycle

我有一个非常无聊的问题。当我的应用程序转到后台时,有时会在LogCat显示时终止该进程:

INFO/ActivityManager(187): Low Memory: No more background processes.
INFO/ActivityManager(187): Process com.app.myapp (pid 20681) has died.
INFO/WindowManager(187): WIN DEATH: Window{40592708 com.app.myapp/app.myapp.dashboard.Dashboard paused=false}
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Consumer closed input channel or an error occurred.  events=0x8
ERROR/InputDispatcher(187): channel '408b1d40 app.myapp/app.myapp.menus.products.Promotions (server)' ~ Channel is unrecoverably broken and will be disposed!
INFO/WindowManager(187): WIN DEATH: Window{408b1d40 app.myapp/app.myapp.menus.products.Promotions paused=false}
INFO/ActivityManager(187): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10100000 cmp=app.myapp/.Main } from pid 187
INFO/ActivityManager(187): Start proc app.myapp for activity app.myapp/.menus.products.Promotions: pid=20721 uid=10062 gids={3003, 1015}

当我尝试返回应用程序时,通过任务切换器(长按回家),它会尝试返回上次打开的活动...并崩溃。

为什么不从头开始,在整个应用程序关闭时打开Main?

ERROR / InputDispatcher错误并不总是出现。

更新

问题是......应用程序已恢复,但其下载的对象(作为散列图)不是......所以当我访问它们时......我有“问题”......

更新2:

如果Application包含我需要的数据或者它是null(在这种情况下它会重新启动应用程序),我已经设法通过在BaseActivity上验证onCreate(由其他所有人扩展)来解决问题。

是否有一个更优雅的解决方案,或者至少可以告诉设备如果应用程序被杀死,我希望重新启动应用程序?

此链接有助于理解问题......并且知道如何存储来自应用程序的数据没有明确的答案:How to declare global variables in Android?

更新3:

所以我专门询问了一个问题如何正确保存应用程序数据。这可以帮助那些有相同问题的人:Android: Best way to save data stored in Application Singleton Class

1 个答案:

答案 0 :(得分:3)

据我所知,它可以追溯,因为用户没有关闭应用程序。但是:您是否正在访问从开始活动传递的活动中的捆绑数据?如果是这样,您可能需要查看可以实现的捆绑实例保存和恢复功能,以解决在无效状态下回到前台的应用程序。

为了清晰起见编辑:应用程序恢复到以前的状态,因为它在后台时由于内存不足而被操作系统杀死。在任务切换回来时,它恢复到之前的状态,并且当恢复该活动时,无效/不存在的捆绑数据可能导致崩溃。