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, проверьте эту ссылку.

Другие вопросы по тегам