簡體   English   中英

單擊啟動器圖標啟動應用程序時,將調用啟動器活動的onCreate()

[英]onCreate() of Launcher activity gets called when app launched on clicking launcher icon

在給定流程將應用程序安裝到Android設備中時,我發現Android應用程序存在一個非常奇怪的錯誤。

  1. 從playstore(舊版本)安裝了該應用。

  2. 啟動應用程序(現在我在HomeScreen中,即HomeActivity )。

  3. 現在,我通過安裝最新版本(正在生產中的版本,尚未發布到Playstore)來升級應用程序。

  4. 單擊啟動器圖標,等待主屏幕變為可見,然后通過按菜單按鈕將應用程序保留在后台。

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

在這種情況下,啟動了Splash Screen( Activity ),然后將我帶到主屏幕。 在日志中,調用轉到HomeActivity的onStop() 這意味着活動沒有被破壞。 因此,當我單擊啟動器圖標時,它應該恢復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時,這種情況才會發生

為什么會在首次啟動時發生這種情況。這是android中的錯誤嗎?如果是,如何避免此問題。

該應用程序在后台運行一段時間后關閉的原因是,設備的內核正在殺死該進程,以便在該位置運行更多進程。 我假設您在后台運行應用程序時正在訪問其他應用程序,這就是為什么它被殺死的原因(因此跳過了Android生命周期中的onDestroy()調用!)。

從Android開發人員指南的文檔到onDestroy()的活動生命周期:

注意:不要指望此方法被稱為保存數據的地方! 例如,如果活動正在內容提供商中編輯數據,則這些編輯應在onPause()或onSaveInstanceState(Bundle)中提交,而不是在此處提交。 通常實現此方法以釋放與活動相關聯的線程之類的資源,以使被破壞的活動不會在其其余應用程序仍在運行時留下這些東西。 在某些情況下,系統會簡單地終止活動的托管過程,而無需在其中調用此方法(或任何其他方法),因此不應將其用於處理在過程消失后仍然存在的事情

鏈接到文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM