Android вызывает полный перезапуск после того, как приложение убито - PullRequest
4 голосов
/ 02 декабря 2010

Hello Мое приложение работает так.

Сначала вызывается StartUpActivity, которая выполняет много инициализации Затем он запускает TvbTabActivity (TabActivity) с другими активностями в качестве вкладок (например, BrowseActivity).

Проблема, с которой я сталкиваюсь, заключается в следующем: когда приложение-убийца задач используется для завершения работы моего приложения на вкладке TvbTabActivity / Browse и приложение снова запускается, система отказывается от нормального потока (StartUpActivity не создается) но вместо этого восстанавливает последнюю видимую активность напрямую (TvbTabActivity).

Как заставить Android ВСЕГДА запускать сначала StartUpActivity, чтобы оно инициализировало приложение?

Очевидно, у меня нет этой проблемы, когда мое приложение само по себе падает, lol, из-за исключения, а затем снова запускается.

<application android:icon="@drawable/appicon"
  android:label="@string/app_name" android:name="com.xyz.QPApplication"
  android:debuggable="true">

  <activity android:name=".activity.StartUpActivity" android:configChanges="locale|orientation"
   android:label="@string/app_name" 
   android:screenOrientation="portrait">
   <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>
  </activity>


  <activity android:name=".catalogue.BrowseActivity" android:configChanges="locale|orientation"
   android:label="@string/app_name" android:screenOrientation="portrait"
    android:launchMode="singleTop">
   <intent-filter>
    <action android:name="com.xyz.android.intent.action.BROWSE" />
    <category android:name="android.intent.category.DEFAULT" />
   </intent-filter>

  </activity>

  <activity android:name=".activity.TvbTabActivity" android:configChanges="locale|orientation"
   android:screenOrientation="portrait" android:launchMode="singleTask">
  </activity>

Ответы [ 3 ]

0 голосов
/ 02 декабря 2010

Существует несколько способов решения вашей проблемы, лучше всего проверить диаграмму жизненного цикла Android http://code.google.com/android/images/activity_lifecycle.png и попытаться найти способ заставить приложение работать в этом контексте.

Конечно, если вы действительно хотите, вы можете убить свое собственное приложение, вызвав Activity.finish (), когда оно достигает состояний onPause () или onStop (), но это довольно уродливое решение.

0 голосов
/ 02 декабря 2010

Вы ничего не можете с этим поделать - с вами происходит то, что API-интерфейс принудительной остановки делает и должен делать.

Убийцы задач злоупотребляют этим API.

Они больше не могут использовать его в 2.2 и позже.

Если вы действительно хотите избежать этого, вы можете ограничить свое приложение только 2.2 или более поздней.Или, если проблема в том, что пользователи жалуются на них, попросите их прекратить использовать убийцы задач.Или, если проблема в том, что вам не нравится, что это происходит, когда вы используете убийцу задач, тогда не используйте убийцу задач.

Также это то же самое поведение, которое происходит, когда пользователь нажимает «Принудительно».остановка "в пользовательском интерфейсе управления приложением.Это, как правило, хорошо, хотя пользователь должен делать это явно, а не то, что эти приложения-убийцы задач все чаще делают, когда они просто бьют вещи в фоновом режиме без непосредственного участия пользователя.

0 голосов
/ 02 декабря 2010

Вы не можете.Android попытается восстановить приложение там, где оно остановилось.Правильный способ справиться с этим - убедиться, что вы понимаете жизненный цикл Activity и поместите соответствующую инициализацию в соответствующее место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...