1. 程式人生 > >Activity在切換螢幕時的方法呼叫【轉】

Activity在切換螢幕時的方法呼叫【轉】

曾經遇到過一個面試題,讓你寫出橫屏切換豎屏Activity的生命週期。現在給大家分析一下他切換時具體的生命週期是怎麼樣的:

1、新建一個Activity,並把各個生命週期打印出來

2、執行Activity,得到如下資訊

onCreate-->
onStart-->
onResume-->

3、按crtl+f12切換成橫屏時

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

4、再按crtl+f12切換成豎屏時,發現列印了兩次相同的log

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

5、修改AndroidManifest.xml,把該Activity新增 android:configChanges="orientation",執行步驟3

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->

6、再執行步驟4,發現不會再列印相同資訊,但多列印了一行onConfigChanged

onSaveInstanceState-->
onPause-->
onStop-->
onDestroy-->
onCreate-->
onStart-->
onRestoreInstanceState-->
onResume-->
onConfigurationChanged-->

7、把步驟5的android:configChanges="orientation" 改成 android:configChanges="orientation|keyboardHidden",執行步驟3,就只打印onConfigChanged

onConfigurationChanged-->

8、執行步驟4

onConfigurationChanged-->
onConfigurationChanged-->

 總結:

1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次

2、設定Activity的android:configChanges="orientation"時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次

3、設定Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法


總結一下整個Activity的生命週期

補充一點,當前Activity產生事件彈出Toast和AlertDialog的時候Activity的生命週期不會有改變

Activity執行時按下HOME鍵(跟被完全覆蓋是一樣的):onSaveInstanceState --> onPause --> onStop       onRestart -->onStart--->onResume

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


相關推薦

Activity切換螢幕方法呼叫

曾經遇到過一個面試題,讓你寫出橫屏切換豎屏Activity的生命週期。現在給大家分析一下他切換時具體的生命週期是怎麼樣的: 1、新建一個Activity,並把各個生命週期打印出來 2、執行Activity,得到如下資訊 onCreate--> onSta

Shell字符串比較相等、不相等方法小結

tin glob [[]] 單引號 word 發生 輸出 開頭 方法 #!/bin/sh #測試各種字符串比較操作。 #shell中對變量的值添加單引號,爽引號和不添加的區別:對類型來說是無關的,即不是添加了引號就變成了字符串類型, #單引號不對相關量進行替換,如不對

android linux 休眠 深度睡眠 檢視 方法 除錯

本文轉載自:https://blog.csdn.net/u011006622/article/details/72900552 在Android移動裝置中,有時按下Power鍵(未接電源,USB)時,因其它apk程式獲取了wake_up鎖未釋放或程式BUG導致未釋放,造成未能進入深度睡眠, 從而加大了耗電

影象處理常用插值方法總結

常用的插值方法 1、最鄰近元法 這是最簡單的一種插值方法,不需要計算,在待求象素的四鄰象素中,將距離待求象素最近的鄰象素灰度賦給待求象素。設i+u, j+v(i, j為正整數, u, v為大於零小於1的小數,下同)為待求象素座標,則待求象素灰度的值 f(i+u, j+v) 如下圖所示

Mysql處理海量數據的一些優化查詢速度方法

有意義 最好 普通 drop git .com war 解決方案 臨時 最近一段時間由於工作需要,開始關註針對Mysql數據庫的select查詢語句的相關優化方法。由於在參與的實際項目中發現當mysql表的數據量達到百萬級時,普通SQL查詢效率呈直線下降,而且如果where

jQuery 的 ajax 方法,返回結果 readyState=4 並且 status=200 ,還進 error 方法

err 前端 log 報錯 但是 tail 格式 success ajax 今天在使用jquery.ajax方法去調用後臺方法時,ajax中得參數data類型是"JSON",後臺DEBUG調試,運行正常,返回正常的結果集,但是前端一直都進到ajax的error方法,百思不得

MySQLMysql併發經典常見的死鎖原因及解決方法

https://www.cnblogs.com/zejin2008/p/5262751.html   1.    mysql都有什麼鎖   MySQL有三種鎖的級別:頁級、表級、行級。 表級鎖:開銷小,加鎖快;不會出現死

Android呼叫ITelephony類的endCall()方法

1. 在src下新建一個包:com.android.internal.telephony(和ITelephony.aidl 中 package 宣告的包名一樣); 2. 然後從系統原始碼中把ITelephony.aidl檔案拷貝到 com.android.intern

iOS語音播放之切換聽筒和揚聲器的方法解決方案

注意事項(也就是我說的問題)     對於不希望啟動接近感測器功能的應用,如果需要進行揚聲器和聽筒進行切換過程中,則必須通過啟用接近感測器來進行聲音輸出模式的切換,在此時,必須要注意,如果當聲音通過聽筒進行播放完畢時,在播放完畢時,此時仍在聽筒模式輸出,如果此時關閉感測器功能,則導致在離開聽筒時,由於感測器

安裝Vue.js的方法

環境搭建 node.js 初始化 其它 cnpm lan commonjs pos 重量級框架 安裝vue.js的方法 一、簡介 Vue.js 是什麽 Vue.js(讀音 /vju?/, 類似於 view) 是一套構建用戶界面的 漸進式框架。與其他重量級框架不同的是

軟件需求分析方法

2.6 業務層 而且 客戶 數據類型 追蹤 回顧 經驗 矛盾 軟件需求分析(Software Reguirement Analysis)是研究用戶需求得到的東西,完全理解用戶對軟件需求的完整功能,確認用戶軟件功能需求,建立可確認的、可驗證的一個基本依據。 軟件需求分析是一

Delphi 導出數據至Excel的7種方法

dbase cas excel classes date pbo item 方式 down 轉自:http://blog.csdn.net/zang141588761/article/details/52275948 一; delphi 快速導出excel u

dpkg: error processing package bluez (--configure) 解決方法

operation proc addition too opera report add message ace 轉自:http://blog.csdn.net/heray1990/article/details/47803541 在 Ubuntu 執行 sudo apt

bash: ssh: command not found解決方法(linux)

inux 配置 pan html clas client oop post bash 原文轉自:http://www.cnblogs.com/ahauzyy/archive/2013/04/25/3043699.html 今天在搭建hadoop的開發環境中,用的是ce

錯誤記錄--更改tomcat端口號方法,Several ports (8005, 8080, 8009)

原因 time stat start already netstat tomcat的配置 min connect 啟動Tomcat服務器報錯: Several ports (8005, 8080, 8009) required by Tomcat v5.5 Server a

JMeter學習(二十八)內存溢出解決方法

不能 -xms 百度 解決 code apache 超過 軟件測試 內存 使用jmeter進行壓力測試時遇到一段時間後報內存溢出outfmenmory錯誤,導致jmeter卡死了,先嘗試在jmeter.bat中增加了JVM_ARGS="-Xmx2048m -Xms2048m

Java/AndroidToast使用方法大全

runnable public 顯示 ssa setview nbsp efault 使用方法 let Toast 是一個 View 視圖,快速的為用戶顯示少量的信息。 Toast 在應用程序上浮動顯示信息給用戶,它永遠不會獲得焦點,不影響用戶的輸入等操作,主要用於 一些幫

C++中三種創建對象的方法

內存 stream self 一般來說 ron ref 支持 內存碎片 搜索 我們都知道C++中有三種創建對象的方法,如下: #include <iostream> using namespace std; class A { private: in

shell腳本執行時報"bad interpreter: Text file busy"的解決方法

and files hat scrip proc nbsp comm this rep 1)問題現象: 在ubuntu下執行以下腳本( while_count),報錯: -bash: ./while_count: /bin/bash: bad interpreter: T