2011-05-18 13 views
6

我有一个非常无聊的问题。当我的应用程序切换到后台,有时进程被杀死的logcat中显示:Android生命周期 - ActivityManager杀死进程 - >从后台返回异常

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} 

当我再尝试返回到应用程序,通过任务切换(长按HOME)它试图返回到最后打开活动......和崩溃。

为什么它从头开始打开整个应用程序关闭时的Main?

ERROR/InputDispatcher erros并不总是显示。

UPDATE:

问题是...应用程序恢复,但已下载(作为一个HashMap)在它的对象是不是......所以,当我访问他们。我有“问题” ......

更新2:

我管理由verifing上的onCreate上BaseActivity(由隔日延长)如果应用程序中包含的数据来解决问题我需要或者它是空的(在这种情况下,它重新启动应用程序)。

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

此链接有助于理解这个问题......并且知道有如何将数据从应用商店没有明确的答案:How to declare global variables in Android?

更新3:

于是我问了一个问题的具体如何正确保存应用程序数据。这可能会帮助那些有同样问题的人:Android: Best way to save data stored in Application Singleton Class

+0

http://stackoverflow.com/questions/6025554/android-application-loses-state-after-launching-another-intent/6025590#6025590 – superfell 2011-05-18 15:39:51

+0

该链接ALMOST回答我的问题..问题是我有数据存储在应用程序类..当应用程序类恢复不是。 – neteinstein 2011-05-18 16:05:00

+0

这也是有用的,但它并没有考虑使用什么方法:http://stackoverflow.com/questions/708012/android-how-to-declare-global-variables – neteinstein 2011-05-19 18:44:22

回答

3

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

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

+0

但是活动堆栈历史怎么样?如果我在那之后按回来,即使它没有崩溃..它会关闭吗?因为这是唯一开放的活动?还是我错了? – neteinstein 2011-05-18 15:57:48

+0

编辑问题以解决您的问题。 – neteinstein 2011-05-18 15:59:34

+0

http://developer.android.com/reference/android/app/Activity.html#SavingPersistentState阅读。它谈论onSaveInstanceState并暂停您的应用程序。这是优雅的解决方案。检测暂停,保存我们的状态。在简历中,您有机会重新初始化,而无需重新加载。我不确定您的评论的活动历史记录部分。你必须尝试一下 – jlindenbaum 2011-05-18 16:36:13