成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android -- Activity的銷毀和重建

移動開發(fā) Android
本文將介紹Activity的銷毀和重建。銷毀分兩種:第一種是正常的銷毀,比如用戶按下Back按鈕或者是activity自己調(diào)用了finish()方法;另一種是由于activity處于stopped狀態(tài),并且它長期未被使用,或者前臺的activity需要更多的資源,這些情況下系統(tǒng)就會關(guān)閉后臺的進(jìn)程,以恢復(fù)一些內(nèi)存。

兩種銷毀

***種是正常的銷毀,比如用戶按下Back按鈕或者是activity自己調(diào)用了finish()方法;

另一種是由于activity處于stopped狀態(tài),并且它長期未被使用,或者前臺的activity需要更多的資源,這些情況下系統(tǒng)就會關(guān)閉后臺的進(jìn)程,以恢復(fù)一些內(nèi)存。

需要注意的是這其中有一種情況就是屏幕旋轉(zhuǎn)的問題,當(dāng)用戶旋轉(zhuǎn)手機屏幕,每一次都會導(dǎo)致activity的銷毀和重新建立。

在第二種情況下,盡管實際的activity實例已經(jīng)被銷毀,但是系統(tǒng)仍然記得它的存在,當(dāng)用戶返回到它的時候,系統(tǒng)會創(chuàng)建出一個新的實例來代替它,這里需要利用舊實例被銷毀時候存下來的數(shù)據(jù)。這些數(shù)據(jù)被稱為“instance state”,是一個存在Bundle對象中的鍵值對集合。

缺省狀態(tài)下,系統(tǒng)會把每一個View對象保存起來(比如EditText對象中的文本,ListView中的滾動條位置等),即如果activity實例被銷毀和重建,那么不需要你編碼,layout狀態(tài)會恢復(fù)到前次狀態(tài)。

但是如果你的activity需要恢復(fù)更多的信息,比如成員變量信息,則需要自己動手寫了。

onSaveInstanceState()

如果要存儲額外的數(shù)據(jù),必須覆寫回調(diào)函數(shù)onSaveInstanceState().

系統(tǒng)會在用戶離開activity的時候調(diào)用這個函數(shù),并且傳遞給它一個Bundle object,如果系統(tǒng)稍后需要重建這個activity實例,它會傳遞同一個Bundle object到onRestoreInstanceState() 和 onCreate() 方法中去。

1

當(dāng)系統(tǒng)停止activity時,它會調(diào)用onSaveInstanceState()(過程1),如果activity被銷毀了,但是需要創(chuàng)建同樣的實例,系統(tǒng)會把過程1中的狀態(tài)數(shù)據(jù)傳給onCreate()和onRestoreInstanceState()(圖中標(biāo)出的2和3)。

存儲Activity狀

當(dāng)系統(tǒng)停止activity時,系統(tǒng)會調(diào)用onSaveInstanceState(),狀態(tài)信息會以鍵值對的形式存儲下來。

默認(rèn)的實現(xiàn)中存儲了activity的view系列的狀態(tài),比如文本和滾動條位置等。

要存儲額外的信息,必須自己實現(xiàn)onSaveInstanceState(),并且給Bundle object加上鍵值對。

  1. static final String STATE_SCORE = "playerScore"
  2. static final String STATE_LEVEL = "playerLevel"
  3. ... 
  4.  
  5. @Override 
  6. public void onSaveInstanceState(Bundle savedInstanceState) { 
  7.     // Save the user's current game state 
  8.     savedInstanceState.putInt(STATE_SCORE, mCurrentScore); 
  9.     savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel); 
  10.      
  11.     // Always call the superclass so it can save the view hierarchy state 
  12.     super.onSaveInstanceState(savedInstanceState); 

要記得調(diào)用基類的實現(xiàn),以實現(xiàn)默認(rèn)的實現(xiàn)。

恢復(fù)Activity狀態(tài)

當(dāng)activity重建時,需要根據(jù)Bundle中的狀態(tài)信息數(shù)據(jù)恢復(fù)activity。onCreate() 和onRestoreInstanceState()回調(diào)函數(shù)都會接收到這個Bundle。

因為每次創(chuàng)建新的activity實例的或重建一個實例的時候都會調(diào)用onCreate()方法,所以必須先檢查是否Bundle是null,如果是null,則表明是要創(chuàng)建一個全新的對象,而不是重建一個上次被銷毀的對象。

比如onCreate()方法可以這么寫:

  1. @Override 
  2. protected void onCreate(Bundle savedInstanceState) { 
  3.     super.onCreate(savedInstanceState); // Always call the superclass first 
  4.     
  5.     // Check whether we're recreating a previously destroyed instance 
  6.     if (savedInstanceState != null) { 
  7.         // Restore value of members from saved state 
  8.         mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
  9.         mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 
  10.     } else { 
  11.         // Probably initialize members with default values for a new instance 
  12.     } 
  13.     ... 

除了在onCreate()中恢復(fù)狀態(tài)外,也可以選擇在onRestoreInstanceState()中實現(xiàn),這個函數(shù)在onStart()之后調(diào)用。

只有在有數(shù)據(jù)要恢復(fù)的時候系統(tǒng)會調(diào)用onRestoreInstanceState(),所以不必檢查Bundle是否為null。

  1. public void onRestoreInstanceState(Bundle savedInstanceState) { 
  2.     // Always call the superclass so it can restore the view hierarchy 
  3.     super.onRestoreInstanceState(savedInstanceState); 
  4.     
  5.     // Restore state members from saved instance 
  6.     mCurrentScore = savedInstanceState.getInt(STATE_SCORE); 
  7.     mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL); 

此處也要注意,不要忘記調(diào)用基類實現(xiàn)。

原文鏈接:http://www.w2bc.com/Article/4848

責(zé)任編輯:閆佳明 來源: w2bc
相關(guān)推薦

2014-08-08 10:36:12

ActivityAndroid

2011-05-30 14:00:35

Android Activity Intent

2015-10-20 15:54:16

android源碼滑動關(guān)閉

2012-02-17 17:07:30

Android安全Activity劫持

2013-01-08 13:33:07

Android開發(fā)Activity入門指南

2018-09-07 10:14:58

2011-05-19 17:49:08

ActivityAndroid開發(fā)

2011-06-16 09:31:21

ActivityAndroid

2011-05-26 15:22:57

Android Activity

2010-09-01 16:44:26

SQL刪除主鍵

2011-06-02 11:13:10

Android Activity

2011-04-12 17:16:52

Activity跳轉(zhuǎn)開發(fā)實例Android學(xué)習(xí)筆記

2010-02-06 10:14:36

Android Act

2011-06-01 17:35:35

Android Activity

2021-08-11 17:15:17

AndroidActivity場景

2010-11-16 09:18:39

oracle重建索引

2014-05-27 14:33:37

AndroidActivitysingleTask

2014-05-27 14:59:24

AndroidActivitysingleTask

2014-05-27 15:04:15

AndroidActivitysingleTask

2014-05-27 15:09:13

AndroidActivitysingleTask
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美成人一区二免费视频软件 | 国产精品毛片一区二区在线看 | 成人精品区| 久久久精品一区 | 亚洲精品中文字幕 | 国产韩国精品一区二区三区 | 国产午夜精品一区二区三区 | 久久久久久成人 | 伊人精品一区二区三区 | 久久精品色视频 | 这里只有精品999 | 久久久久久成人 | 中文在线播放 | 久久国产视频一区 | 亚洲3级 | 一二三四在线视频观看社区 | 欧美精品在线播放 | 国产精品99久久久久久人 | 中文字幕亚洲精品 | 天天搞天天搞 | 国产欧美一区二区三区在线看 | 亚洲国产精品99久久久久久久久 | 一区二区三区电影网 | 超碰伊人久久 | 久久久精品| m豆传媒在线链接观看 | 中文字幕 在线观看 | 成人久久18免费网站图片 | 国产中的精品av涩差av | 国产精品观看 | 欧美 日韩 中文 | 欧美a在线观看 | 99精品国产一区二区三区 | 亚洲精选一区二区 | 狠狠狠色丁香婷婷综合久久五月 | 亚州综合在线 | 亚洲一区视频 | 亚洲成人一区二区 | 日韩在线视频一区二区三区 | 欧美日韩三级 | 欧美xxxx性 |