У меня есть нативное приложение с одним действием, которое использует класс NativeActivity. В случае сбоя приложения оно немедленно перезапускается. Я весь день искал в интернете эту проблему.
Это происходит при использовании любого из следующих (сигнализируется SIGSEGV):
— assert () из assert.h
— __android_log_assert () из android / log.h
— прервать ()
— 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
// Здесь начинается дамп памяти
РЕДАКТИРОВАТЬ:
Что касается маркировки этого вопроса как дубликата, я объяснил, почему он отличается сразу после первой ссылки. Решение не сработало в моем случае.
На моем Galaxy S III (стоковое ПЗУ) приложения не перезагружаются автоматически после сбоя. Так может быть, перезапуск зависит от того, какой ROM вы используете?
Других решений пока нет …