Android应用程序崩溃时重新启动

问题描述:

我原本问这里的问题:
http://www.experts-exchange.com/Programming/Languages/Java/Android/Q_26754261.html
但我想这可能是一个更好的地方问问题。Android应用程序崩溃时重新启动

我做了一个Android应用程序调用一些本地代码。当我第一次运行的Android 2.2设备上的应用程序(按图标),它工作正常,但如果我按后退按钮,然后再次按它的图标,应用程序崩溃(从日食信息)将重新启动应用程序:

01-19 13:21:51.989: INFO/DEBUG(30): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** 
    01-19 13:21:51.989: INFO/DEBUG(30): Build fingerprint: 'generic/sdk/generic:2.3/GRH55/79397:eng/test-keys' 
    01-19 13:21:51.989: INFO/DEBUG(30): pid: 354, tid: 381 >>> Test.Application <<< 
    01-19 13:21:51.989: INFO/DEBUG(30): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0000005a 

我检查了本地代码并没有看到任何错误。该代码也是我第一次运行它。它与此有关,当按下后退按钮时并不是所有资源都被释放。 我,虽然我已经通过的onDestroy(0)将System.exit找到一个简单的解决问题的方法(),但是这只能在应用程序处于横向模式。

在横向模式下的生命周期是这样的:

01-15 22:38:29.913: INFO(18062): onCreate 
    01-15 22:38:30.143: INFO(18062): onResume 

Pressed back button 

    01-15 22:38:34.093: INFO(18062): onPause 
    01-15 22:38:34.343: INFO(18062): OnDestroy 

在纵向模式下的生命周期是这样的:

01-15 22:41:00.343: INFO(18167): onCreate 
    01-15 22:41:00.863: INFO(18167): onResume 
    01-15 22:41:00.913: INFO(18167): onPause 
    01-15 22:41:00.913: INFO(18167): OnDestroy 
    01-15 22:41:01.423: INFO(18167): onCreate 
    01-15 22:41:01.693: INFO(18167): onResume 

Pressed back button 

    01-15 22:41:05.663: INFO(18167): onPause 
    01-15 22:41:05.963: INFO(18167): OnDestroy 

因此,在纵向模式下的事情发生了两次 - 所以,如果我插入System.exit(0)在onDestroy中,当设备处于直立/纵向模式时,应用程序不会启动。

我想最好的解决方案是找到真正的原因,为什么本机代码崩溃,但到目前为止我还没有找到原因。也许这与低内存有关。我曾尝试运行Debug.getNativeHeapFreeSize(),并且可用内存量有时非常低,但错误消息显示“故障地址”。

应用程序崩溃后,我按它的图标,没有问题再次运行应用程序。因此,该应用程序只能成功启动您按下图标的一半时间。

你知道什么是错误的或者是解决方法吗? 我在这个网站上搜索了一个答案,发现了一些关于双生命周期问题以及如何获得JNI堆栈跟踪的信息。我会再看看它,看看我能否找到原因。如果设备处于纵向模式,但是如果应用程序随后安装在没有这种双生命周期问题的设备上,我也可以制定丑陋的解决方法,以确保System.exit(0)不会在首次调用onDestroy时调用在纵向模式下,应用程序无法正常关闭。

/金

+0

请使用“和”按钮设置您的问题的格式。 – 2011-01-20 07:47:14

它实际上是因为我忘了释放在C++代码的某些内存时出现此错误。现在它终于不再崩溃,双生命周期问题再也无关紧要了。