簡體   English   中英

在活動的 onPause() 或 onStop() 狀態運行代碼

[英]Running code in onPause() or onStop() state of the activity

我的 android 應用中有一個功能需要在用戶每次嘗試編輯他或她的個人資料時運行。 我的應用程序中有兩個部分的編輯配置文件(請不要問為什么,背后有一個很長很乏味的原因)。 如果用戶決定取消所有內容,我需要恢復用戶在編輯配置文件的第一部分所做的更改。 我在編輯配置文件的第二部分做了一個取消按鈕,但我的問題是,如果用戶按下設備上的返回按鈕或主頁按鈕並且應用程序調用onPause()onStop()怎么辦? 如何在活動的這兩個階段運行相同的代碼? 有誰知道如何將代碼置於不同狀態的活動? 我只是創建一個函數onPause()並將代碼粘貼在那里嗎? 那行得通嗎?

是的,它絕對應該有效。 在您的情況下,您應該在 onPause() 方法中編寫代碼。

以下是活動生命周期的摘要:

onCreate():

在第一次創建活動時調用。 這是您應該進行所有常規靜態設置的地方:創建視圖、將數據綁定到列表等。此方法還為您提供了一個包含活動先前凍結狀態的 Bundle(如果有的話)。 總是跟在 onStart() 之后。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Write your code here
}

開始():

當活動對用戶可見時調用。 如果活動進入前台,則后跟 onResume(),如果活動變為隱藏,則后跟 onStop()。

@Override
public void onStart() {
    super.onStart();
    //Write your code here
}

onResume():

當活動開始與用戶交互時調用。 此時,您的活動位於活動堆棧的頂部,用戶輸入進入它。 后面總是跟着 onPause()。

@Override
public void onResume() {
    super.onResume();
    //Write your code here
}

暫停():

當系統即將開始恢復之前的活動時調用。 這通常用於提交對持久數據的未保存更改、停止動畫和其他可能消耗 CPU 的內容等。此方法的實現必須非常快,因為在此方法返回之前不會恢復下一個活動。 后跟 onResume() 如果活動返回到前面,或者 onStop() 如果它對用戶不可見。

@Override
public void onPause() {
    super.onPause();
    //Write your code here
}

停止():

當 Activity 不再對用戶可見時調用,因為另一個 Activity 已經恢復並且正在覆蓋這個 Activity。 這可能是因為一項新活動正在開始,一個現有活動被帶到這個活動之前,或者這個活動正在被破壞。 如果此 Activity 回來與用戶交互,則后跟 onRestart(),如果此 Activity 正在消失,則后跟 onDestroy()。

@Override
public void onStop() {
    super.onStop();
    //Write your code here
}

銷毀():

在您的活動被銷毀之前您收到的最后一個電話。 這可能是因為活動正在完成(有人在其上調用了 finish() ,或者因為系統暫時銷毀了該活動的實例以節省空間)。您可以使用 isFinishing() 方法區分這兩種情況。

@Override
public void onDestroy() {
    super.onDestroy();
    //Write your code here
}

你可以在 onPause 和 onStop 里面做很多事情,只要記住調用super.onPause(); , super.onStop(); 或者任何你需要的東西,只需按照下面的模式。 只需將代碼添加到您的活動中即可。

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first
    // Do what you want.
}

此外,如果您希望您的用戶能夠返回您的活動並編輯某些內容而不是關閉它,您只需調用onBackPressed()

@Override
public void onBackPressed() {
     super.onBackPressed();
     // You can just call onStop to close the app
     // or do what you want.
}

只有 onPause 保證被調用

暫無
暫無

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

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