中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于Activity保存狀態的研究

發布時間:2020-07-02 19:30:59 來源:網絡 閱讀:574 作者:VincentTung 欄目:開發技術

 一.Activity進行橫豎屏切換時候的生命周期

1.運行的時候

 

關于Activity保存狀態的研究

2.切橫屏(生命周期執行一次)

 

關于Activity保存狀態的研究

3.再切豎屏(生命周期執行兩次)

 

關于Activity保存狀態的研究

重寫返回按鈕事件public void onBackPressed()此方法當返回按鈕事件出發時,體系會默許調用finish(),你直接return別讓體系調用就行,back鍵后臺參考源碼home的事件并重寫

@Override
public void onBackPressed() {
// 這里處理邏輯代碼,該方法僅適用于2.0或更新版的sdk
return;
}

android的手機的back鍵默認行為是finish實質就是從Task中將其出棧處于前臺的Activity的即Activity的狀態為Destroy狀態,再次啟動該Activity是從onCreate開始的。 而Home鍵默認是stop前臺的Activity即狀態為onStop而不是Destroy,若再次啟動它,則是從OnResume開始的,即會保持上次Activityd的狀態。 back鍵也有例外的,按back鍵不會關閉Activity的,比如播放音樂,按back鍵之后仍可以繼續播放音

按下Back返回鍵

 

關于Activity保存狀態的研究

按下Home

關于Activity保存狀態的研究

按下Home鍵后再次運行改程序

關于Activity保存狀態的研究

如果將activityandroidconfigChanges=orientation|keyboardHidden屬性設置后

1, 同上1

2, 

關于Activity保存狀態的研究

3, 

關于Activity保存狀態的研究

總結

1.Activity在進行橫屏切換時會生命周期會執行一次,這個生命周期不是正常所說的連貫的生命周期,會先調用onSaveInstanceState()方法,在這里可以進行Activity的狀態保存,然后是onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume()->onRestoreInstanceState()->onRsume();

進行豎屏切換時會調用2次,

2.如果在Manifest.xml中設置了Activity的屬性android:configChanges=orientation|keyboardHidden,則進行橫屏切換的時候只會調用一次onConfigurationChanged()方法,豎屏會調用兩次

按下Home鍵,onSaveInstanceState()-> onPause()->onStop();此時運行別的程序,如果沒被收回內存,再運行該程序

onRestart()->onStart()->onResume()

Activity未被完全覆蓋只是失去焦點:onPause--->onResume

二.Activity的狀態保存

方法一:通過onSaveInstanceState() onRestoreInstanceState()onCreate()

Back鍵不會調用onSaveInstanceState,只有在Home鍵,橫豎屏切換和系統收回Activity的時候才會調用,

onSaveInstanceState的調用遵循一個重要原則,即當系統未經你許可時銷毀了你的activity,則onSaveInstanceState會被系統調用,這是系統的責任,因為它必須要提供一個機會讓你保存你的數據至于onRestoreInstanceState方法,需要注意的是onSaveInstanceState方法和onRestoreInstanceState方法不一定是成對的被調用的onRestoreInstanceState被調用的前提是,activity A“確實被系統銷毀了,而如果僅僅是停留在有這種可能性的情況下,則該方法不會被調用,例如,當正在顯示activity A的時候,用戶按下HOME鍵回到主界面,然后用戶緊接著又返回到activity A,這種情況下activity A一般不會因為內存的原因被系統銷毀,故activity AonRestoreInstanceState方法不會被執

一.關鍵字:通過參數Bundle 來進行存儲

onCreate(Bundle savedInstanceState)onRestoreInstanceState(Bundle savedInstanceStae)都可以進行數據的恢復,

關于Activity保存狀態的研究

從圖中,我們可以看出,onCreate()方法運行在onRestoreInstanceState()方法之前。


  1. @Override 
  2. protected void onSaveInstanceState(Bundle outState) { 
  3. // TODO Auto-generated method stub 
  4. super.onSaveInstanceState(outState); 
  5. Log.i(TAG, "onSaveInstanceState"); 
  6. String content = editText.getText().toString(); 
  7. if (null != content) { 
  8. outState.putString(TAG, content); 
  9. @Override 
  10. protected void onRestoreInstanceState(Bundle savedInstanceState) { 
  11. // TODO Auto-generated method stub 
  12. super.onRestoreInstanceState(savedInstanceState); 
  13. Log.i(TAG, "onRestoreInstanceState"); 
  14. if(null!=savedInstanceState){ 
  15. editText.setText(savedInstanceState.getString(TAG)); 

方法二:通過 Activity的相應方法,這里選用onPause() onResume()

在這里是通過SharedPreference存儲


  1. @Override 
  2.     protected void onPause() { 
  3.         // TODO Auto-generated method stub 
  4.         Log.i(TAG, "onPause"); 
  5.         String content = editText.getText().toString(); 
  6.         if (null != content) { 
  7.             this.getPreferences(MODE_PRIVATE).edit().putString(TAG, content) 
  8.             .commit(); 
  9.         } 
  10.         super.onPause(); 
  11.     } 
  12.  
  13.     @Override 
  14.     protected void onResume() { 
  15.         // TODO Auto-generated method stub 
  16.         Log.i(TAG, "onResume"); 
  17.         editText.setText(this.getPreferences(MODE_PRIVATE).getString(TAG, "")); 
  18.         super.onResume(); 
  19.     } 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

教育| 永仁县| 景谷| 兴义市| 平昌县| 宜兴市| 浪卡子县| 报价| 若羌县| 巴里| 通州市| 五河县| 简阳市| 保山市| 通道| 龙里县| 宜丰县| 青川县| 邮箱| 徐州市| 康定县| 呼伦贝尔市| 湘阴县| 盐池县| 安阳县| 广水市| 昌乐县| 桂东县| 元谋县| 南川市| 石柱| 石嘴山市| 山阴县| 塘沽区| 兰考县| 华池县| 怀安县| 南通市| 塘沽区| 沙湾县| 邹平县|