onDestroy() не будет вызываться после this.finish()
Мне интересно, почему Motorola Milestone с 2.1-update1 ведет себя иначе, чем эмулятор или, например, Nexus One. Я пытаюсь выйти из приложения с помощью:
@Override
protected void onPause() {
if(mayDestroyActivity) this.finish();
super.onPause();
}
Это хорошо работает на эмуляторе или Nexus One. onDestroy()
вызывается сразу после onPause()
а также onStop
, Но не для Вехи. Вместо, onDestroy()
вызывается, когда начинается другое действие. Его раздел в Манифесте выглядит так:
<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/questionnaire_item"
android:launchMode="singleInstance"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<category android:name="android.intent.category.OPENABLE" />
</intent-filter>
</activity>
У кого-нибудь есть подсказка на это? Мое приложение зависит от правильного выхода, так как я сохраняю весь прогресс в onDestroy()
Спасибо,
Стеф
3 ответа
Если пользователь выходит на главный экран, это не обязательно означает, что приложение должно быть закрыто. В большинстве случаев это даст лучший пользовательский опыт, если приложение просто перейдет в фоновый режим. Попробуйте положиться на saveInstanceState и onPause.
Выход из приложения считается плохой практикой в мире Android, так как использование телефона с хорошей системой для истинного мультитача может улучшить взаимодействие с пользователем, если приложение продолжает работать после нажатия на главном экране.
Вы делаете это не правильно. Вот что говорит Док:
Примечание: не рассчитывайте, что этот метод вызывается как место для сохранения данных! [...] Существуют ситуации, когда система просто убивает процесс хостинга действия, не вызывая этот метод (или любой другой) в нем, поэтому его не следует использовать для выполнения задач, которые должны остаться после завершения процесса,
http://developer.android.com/reference/android/app/Activity.html
Вы должны использовать onSaveInstanceState
, проверьте эту ссылку.