2015-06-02 64 views
0

我發現在Android應用程序中使用給定流程安裝應用程序時非常奇怪的錯誤。當單擊啓動器圖標啓動應用程序時,啓動器活動的onCreate()會被調用

  1. 從playstore(舊版本)安裝應用程序。

  2. 啓動應用程序(現在我處於HomeScreen,.i.e。,HomeActivity)。

  3. 現在,我通過安裝最新版本(生產版本,尚未發佈到PlayStore)升級應用程序。

  4. 單擊啓動器圖標,等待主屏幕變爲可見並通過按菜單按鈕將應用程序保留在後臺。

  5. 現在,通過點擊啓動器圖標啓動應用程序。

在這種情況下,閃屏(Activity)被推出,然後帶我到主屏幕。在日誌中,呼叫轉到HomeActivity的onStop()。這意味着Activity不會被銷燬。所以,當我點擊啓動器圖標時,它應該恢復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它在Android中的錯誤..?如果是這樣,如何避免這個問題..

回答

0

究其原因,應用程序在後臺一段時間後關閉是因爲你的設備的內核正在終止進程,以便在其中運行更多的進程。我假設你正在訪問其他應用程序,而你的應用程序在後臺運行,這就是爲什麼它被殺死(並因此跳過Android生命週期中的onDestroy()調用!)。

通過Android開發者指南,活動生命週期的onDestroy()的文檔:

注意:不要在這個方法被稱爲保存數據的地方算!例如,如果一個活動正在編輯內容提供者中的數據,那麼這些編輯應該在onPause()或onSaveInstanceState(Bundle)中提交,而不是在這裏。這種方法通常被實現爲釋放資源,例如與活動相關聯的線程,這樣一個被銷燬的活動就不會離開這些東西,而其他應用程序仍在運行。在某些情況下,系統只會在不調用此方法(或任何其他方法)的情況下終止活動的託管過程,因此它不應該用於在過程消失後執行的任何操作

Link to documentation

+0

,我認爲同樣的。可能是我錯了,但這是我觀察到的。一段時間後,它可以正常工作。如果設備內核正在殺死這個進程,那麼它應該每次都是正確的。爲什麼只在最初的啓動階段。這是我對此感到困惑的地方。 –

相關問題