1. 程式人生 > >關於“熄屏、轉屏、Home鍵返回、Activity跳轉”對activity生命狀態影響的分析

關於“熄屏、轉屏、Home鍵返回、Activity跳轉”對activity生命狀態影響的分析

1 說明

最近寫了一個程式,用到了Service將資料傳給Activity,然後Activity進行介面資料顯示。發現Service對數值的改變,在熄屏的狀態下和Activity 介面顯示的數值不一致,便想到熄屏狀態Activity的生命狀態被影響了。這裡將熄屏和轉屏對Activity生命狀態的改變驚醒對照分析。
activity生命週期狀態圖:
這裡寫圖片描述

2 熄屏

當程式被開啟,生命狀態執行到Onresume():

05-15 22:30:24.074 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)
05-15 22:30:24.113 30285-30285/? I/houyafei: -------------->onStart() 05-15 22:30:24.116 30285-30285/? I/houyafei: -------------->onResume()

熄屏後:

05-15 22:31:42.417 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:31:42.431 30285-30285/? I/houyafei: -------------->onStop()

再次點亮螢幕:

05-15 22:32:48
.090 30285-30285/? I/houyafei: -------------->onRestart() 05-15 22:32:48.100 30285-30285/? I/houyafei: -------------->onStart() 05-15 22:32:48.103 30285-30285/? I/houyafei: -------------->onResume()

退出程式:

05-15 22:34:13.997 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:34:14.308 30285-30285/? I/houyafei:
-------------->onStop() 05-15 22:34:14.308 30285-30285/? I/houyafei: -------------->onDestroy()

3 轉屏

開啟程式(豎屏):

05-15 22:35:01.520 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)
05-15 22:35:01.529 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:35:01.531 30285-30285/? I/houyafei: -------------->onResume()

開始旋轉為橫屏:

05-15 22:35:38.452 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:35:38.453 30285-30285/? I/houyafei: -------------->onStop()
05-15 22:35:38.453 30285-30285/? I/houyafei: -------------->onDestroy()
05-15 22:35:38.516 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)
05-15 22:35:38.532 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:35:38.532 30285-30285/? I/houyafei: -------------->onResume()

再次旋轉為豎屏:

05-15 22:37:01.296 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:37:01.296 30285-30285/? I/houyafei: -------------->onStop()
05-15 22:37:01.296 30285-30285/? I/houyafei: -------------->onDestroy()
05-15 22:37:01.387 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)
05-15 22:37:01.409 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:37:01.411 30285-30285/? I/houyafei: -------------->onResume()

關閉程式:

05-15 22:37:55.848 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:37:56.139 30285-30285/? I/houyafei: -------------->onStop()
05-15 22:37:56.139 30285-30285/? I/houyafei: -------------->onDestroy()

也就是說,選裝螢幕相當於程式瞬間關閉然後重新開啟。

4 activity之間跳轉

開啟程式啟動第一個Activity:

05-15 22:39:31.526 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)
05-15 22:39:31.537 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:39:31.538 30285-30285/? I/houyafei: -------------->onResume()

點選切換到第二個Activity,則第一個Activity的生命狀態:

05-15 22:40:17.056 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:40:17.499 30285-30285/? I/houyafei: -------------->onStop()

再返回第一個Activity:

05-15 22:40:45.307 30285-30285/? I/houyafei: -------------->onRestart()
05-15 22:40:45.308 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:40:45.308 30285-30285/? I/houyafei: -------------->onResume()

到這裡大家肯定會發現,切換Activity和熄屏狀態,對Activity生命週期的影響是一樣的。

5返回桌面

開啟Activity:

05-15 22:43:16.000 30285-30285/? I/houyafei: ----------------->onCreate(Bundle savedInstanceState)
05-15 22:43:16.011 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:43:16.013 30285-30285/? I/houyafei: -------------->onResume()

點選Home鍵後:

05-15 22:43:51.699 30285-30285/? I/houyafei: -------------->onPause()
05-15 22:43:52.011 30285-30285/? I/houyafei: -------------->onStop()

點選桌面程式圖示再次開啟程式(1):

05-15 22:44:36.597 30285-30285/? I/houyafei: -------------->onRestart()
05-15 22:44:36.601 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:44:36.602 30285-30285/? I/houyafei: -------------->onResume()

點選選單鍵再次開啟程式(2):

05-15 22:47:02.261 30285-30285/? I/houyafei: -------------->onRestart()
05-15 22:47:02.275 30285-30285/? I/houyafei: -------------->onStart()
05-15 22:47:02.276 30285-30285/? I/houyafei: -------------->onResume()

以上兩種狀態是一致的。

6總結

對於,熄屏、Activity跳轉、Home鍵返回主介面等對Activity生命週期的影響是一樣的。因此,對於一些程式執行的資料一定要在onPause()中儲存,在onResume()重新讀取。
對於旋轉螢幕則是程式關於又重新開啟,因此程式執行的資料一定要儲存好。暫時就寫到這裡,回去睡覺啦~~