2015-06-02 16 views
0

Я обнаружил очень странную ошибку с приложением Android при установке приложения на устройстве Android с заданным потоком.onCreate() действия Launcher вызывается, когда приложение запускается при нажатии на значок запуска.

  1. Установлено приложение из PlayStore (старая версия).

  2. Запущено приложение (теперь я нахожусь в HomeScreen, .i.e., HomeActivity).

  3. Теперь я обновил приложение, установив последнюю сборку (в процессе сборки, но для выхода в игровой магазин).

  4. Щелкните значок запуска, дождитесь, пока на экране отобразится «Домашний экран» и сохраните приложение в фоновом режиме, нажав кнопку меню.

  5. Теперь запустите приложение, щелкнув значок пусковой установки.

В этом случае, Splash Screen (Activity) получает запущен, а затем берет меня на домашний экран. В журналах вызов переходит к onStop() из HomeActivity. Это означает, что «Активность» не уничтожается. Итак, когда я нажимаю значок запуска, он должен возобновить HomeActivity, вместо этого он воссоздает splashActivity. Но когда я запускаю приложение из фона, активность возобновляется, и экран всплывания не отображается. Правильное ли поведение? Если да, то я не получаю обратный вызов до onDestroy().

Ниже мой код действия в манифесте:

<activity 
      android:name="com.app.ui.HomeActivity" 
      android:label="@string/app_name" 
      android:launchMode="singleTask" 
      android:configChanges="orientation|keyboard|keyboardHidden|screenSize|screenLayout|uiMode" 
      android:screenOrientation="portrait" 
      android:windowSoftInputMode="adjustNothing"> 

     </activity> 

     <activity 
      android:name="com.app.ui.SplashActivity" 
      android:label="@string/app_name" 
      android:screenOrientation="sensorPortrait" 
      android:theme="@android:style/Theme.Translucent.NoTitleBar"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

Я не устанавливал режим запуска для SplashActivity. И через какое-то время он становится правильным, и экран заставки не отображается.

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

Кроме того, когда я установил приложение без обновления, эта проблема не возникла. Только тогда, когда я обновляю APK, это происходит

Почему это происходит в начальном launches..Is это ошибка в андроиде? .. Если да, то как избежать этой проблемы ..

ответ

0

Причины, по которой приложение закрывается через некоторое время в фоновом режиме, потому что ядро ​​вашего устройства убивает процесс, чтобы запустить больше процессов на своем месте. Я предполагаю, что вы обращаетесь к другим приложениям, пока ваше приложение работает в фоновом режиме, и именно поэтому его убивают (и, следовательно, пропускают вызов onDestroy() в жизненном цикле Android!).

Из документации на руководство Android разработчика на активность Lifecycle для OnDestroy():

Примечание: не рассчитывайте на этот метод называют в качестве места для сохранения данных! Например, если действие редактирует данные в поставщике контента, эти изменения должны быть зафиксированы либо в onPause(), либо в onSaveInstanceState (Bundle), но не здесь. Этот метод обычно реализуется для бесплатных ресурсов, таких как потоки, связанные с активностью, так что разрушенная активность не оставляет таких вещей, пока остальная часть ее приложения все еще работает.Бывают ситуации, когда система просто убивает процесс хостинга активности, не вызывая этот метод (или любые другие) в нем, поэтому его нельзя использовать для выполнения действий, которые должны оставаться вокруг после завершения процесса.

Link to documentation

+0

, я думал то же самое. Возможно, я ошибаюсь, но это то, что я наблюдал. Через некоторое время он работает правильно. Если ядро ​​устройства убивает процесс, тогда он должен убивать каждый раз правильно. Почему только в начальных запусках. Здесь я смущен. –