簡體   English   中英

什么是 onCreate(Bundle savedInstanceState)

[英]What's onCreate(Bundle savedInstanceState)

誰能幫助我了解的Bundle savedInstanceStateonCreate(Bundle savedInstanceState)我在Android的新手。 我試着從 developer.android.com 理解它。 但我無法理解。 任何人都可以簡化它嗎?

如果您將應用程序的狀態保存在一個包中(通常是onSaveInstanceState非持久性動態數據),如果需要重新創建活動(例如,方向更改),則可以將其傳遞回onCreate ,這樣您就不會丟失這個先驗信息。 如果未提供數據,則savedInstanceState為空。

...您應該使用 onPause() 方法將任何持久數據(例如用戶編輯)寫入存儲。 此外,在將活動置於這種后台狀態之前調用方法 onSaveInstanceState(Bundle),允許您將活動中的任何動態實例狀態保存到給定的 Bundle 中,以便稍后在 onCreate(Bundle) 中接收,如果活動需要重新創建。 有關流程的生命周期如何與其托管的活動相關聯的更多信息,請參閱流程生命周期部分。 請注意,在 onPause() 而不是 onSaveInstanceState(Bundle) 中保存持久數據很重要,因為后者不是生命周期回調的一部分,因此不會在其文檔中描述的所有情況下都被調用。

來源

onCreate(Bundle savedInstanceState)當活動第一次開始時你會得到Bundle null,當活動方向改變時它會被使用......

http://www.gitshah.com/2011/03/how-to-handle-screen-orientation_28.html

Android 提供了另一種優雅的方式來實現這一點。 為了實現這一點,我們必須重寫一個名為onSaveInstanceState()的方法。 Android 平台允許用戶保存任何實例狀態。 實例狀態可以保存在 Bundle 中。 Bundle 作為參數傳遞給 onSaveInstanceState 方法。

我們可以從作為參數傳遞給onCreate方法的 Bundle 加載保存的實例狀態。 我們還可以在onRestoreInstanceState方法中加載保存的實例狀態。 但我會把它留給讀者去弄清楚。

正如 Dhruv Gairola 回答的那樣,您可以使用 Bundle savedInstanceState 來保存應用程序的狀態。 我試圖舉一個非常簡單的例子,像我這樣的新學習者可以很容易地理解。

假設您有一個帶有 TextView 和 Button 的簡單片段。 每次單擊按鈕時,文本都會更改。 現在,改變你的設備/模擬器的方向,並注意到你丟失了數據(意味着點擊后你得到了更改的數據)並且片段再次作為第一次啟動。 通過使用 Bundle savedInstanceState 我們可以擺脫這個。 如果你看一下片段的生命周期。 Fragment Lifecylce你會得到一個方法“onSaveInstanceState”在片段即將被銷毀時被調用。

所以,我們可以像這樣保存狀態意味着改變的文本值到那個包中

 int counter  = 0;
 @Override
 public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putInt("value",counter);
 }

確定方向后,將調用“onCreate”方法對嗎? 所以我們可以這樣做

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if(savedInstanceState == null){
        //it is the first time the fragment is being called
        counter = 0;
    }else{
        //not the first time so we will check SavedInstanceState bundle
        counter = savedInstanceState.getInt("value",0); //here zero is the default value
    }
}

現在,您不會在定向后失去價值。 將始終顯示修改后的值。

Android 中的 onCreate(Bundle savedInstanceState) 函數:

  1. 當 Activity 首次調用或啟動時,onCreate(Bundle savedInstanceState) 方法負責創建該 Activity。

  2. 當活動的方向(即從水平到垂直或從垂直到水平)改變或當活動被任何操作系統強行終止時,savedInstanceState 即捆綁類的對象將保存活動的狀態。

  3. Orientation 更改后,onCreate(Bundle savedInstanceState) 將調用並重新創建活動並從savedInstanceState 加載所有數據。

  4. 基本上 Bundle 類用於在應用程序中發生上述情況時存儲活動數據。

  5. 應用程序不需要 onCreate()。 但是在 app 中使用它的原因是因為該方法是放置初始化代碼的最佳位置。

  6. 您也可以將初始化代碼放在 onStart() 或 onResume() 中,當您的應用程序首先加載時,它的工作方式與 onCreate() 中的相同。

onCreate(Bundle)在活動第一次啟動時被調用。 您可以使用它來執行一次性初始化,例如創建用戶界面。 onCreate()接受一個參數,該參數為 null 或一些先前由onSaveInstanceState保存的狀態信息。

onCreate(Bundle savedInstanceState) 被調用並且如果您的活動在上述場景(可視化視圖)中終止,則savedInstanceState 將是非空的。 然后,您的應用程序可以從savedInstanceState 中抓取(捕獲)數據並重新生成您的活動

暫無
暫無

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

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