2

我有一个使用 NativeActivity 类的单活动本机应用程序。如果应用程序崩溃,它会立即重新启动。我整天在互联网上搜索这个问题。

当使用以下任何一种(SIGSEGV 信号)时会发生这种情况:
- assert.h 中的 assert()
- android/log.h 中的 __android_log_assert()
- abort() - pthread_exit()

我做了一些研究:

https://stackoverflow.com/a/7387659
没用,发送 SIGKILL 会导致发送另一个 SIGSEGV 并重新启动应用程序。

https://stackoverflow.com/a/6121393/1374605
https://stackoverflow.com/a/2632649
我尝试只运行一项活动。我错过了什么吗?

当一个 JNI 函数(JNIEnv 成员)调用抛出并且另一个 JNI 函数被调用而不在它们之间调用 ExceptionClear() 时,也会发生重新启动。这与JVM有关吗?

任何想法为什么应用程序在崩溃后重新启动以及如何防止它?

更新(logcat):

// 之前的内存转储到此结束

09-26 15:36:48.771: I/BootReceiver(2374): Copying /data/tombstones/tombstone_06 to DropBox (SYSTEM_TOMBSTONE)  
09-26 15:36:48.781: I/ActivityManager(2374): Process net.devenec.devengine.sample (pid 4750) has died.  
09-26 15:36:48.791: I/ActivityManager(2374): Start proc net.devenec.devengine.sample for activity net.devenec.devengine.sample/android.app.NativeActivity: pid=4763 uid=10075 gids={50075, 1028}  
09-26 15:36:48.801: D/Zygote(1953): Process 4750 terminated by signal (11)  
09-26 15:36:48.801: D/dalvikvm(4763): Late-enabling CheckJNI  
09-26 15:36:48.826: I/dalvikvm(4763): Turning on JNI app bug workarounds for target SDK version 9...  
09-26 15:36:48.841: W/Trace(4763): error opening trace file: No such file or directory (2)  
// My code starts here  
09-26 15:36:48.856: D/DevEngine(4763): [Application] Create  
09-26 15:36:48.856: A/libc(4763): source/android/AndroidApplication.cpp:141: static void Platform::Application::create(ANativeActivity*): assertion "false" failed  
09-26 15:36:48.856: A/libc(4763): Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 4763 (evengine.sample)  
09-26 15:36:48.956: I/DEBUG(1950): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***  
09-26 15:36:48.956: I/DEBUG(1950): Build fingerprint: 'samsung/m3xx/m3:4.1.2/JZO54K/I9305XXBMA6:user/release-keys'  
09-26 15:36:48.956: I/DEBUG(1950): Revision: '2'  
09-26 15:36:48.956: I/DEBUG(1950): pid: 4763, tid: 4763, name: evengine.sample  >>> net.devenec.devengine.sample <<<  
09-26 15:36:48.956: I/DEBUG(1950): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr deadbaad  

// 内存转储从这里开始

编辑

关于将此问题标记为重复,我已经解释了为什么在第一个链接之后这会有所不同。该解决方案在我的情况下不起作用。

4

1 回答 1

2

在我的 Galaxy S III (stock ROM) 上,应用程序在崩溃后不会自动重启。所以也许他们是否重启取决于你使用的ROM?

于 2013-09-26T13:35:19.970 回答