目錄
1、android:configChanges設置orientation或orientation|keyboardHidden或不填
2、android:configChanges設置有orientation|screenSize
生命週期
onCreate():Activity第一次啓動時執行;
onStart():Activity正在被啓動;
onResume():Activity可見並能進行交互;
onPause():Activity可見但失去焦點的時候執行;
onStop():Activity不可見;
onRestart():Activity沒有被銷燬的時候重新啓動;
onDestroy():Activity被銷燬;
常見場景
Activity啓動:onCreate()->onStart()->onResume()
跳轉其他界面:onPause()->onStop()
返回Activity:onRestart()->onStart()->onResume()
退出Activity:onPause()->onStop()->onDestroy()
進程優先級
1、前臺進程:與用戶正在交互的Activity所在進程;
2、可見進程:Activity可見但沒有在前臺所在進程;
3、服務進程:Activity在後臺啓動Service所在進程;
4、後臺進程:Activity完全處於後臺所在進程;
5、空進程:沒有任何Activity存在的進程,最先被回收;
橫豎屏
android:screenOrientation屬性:
portrait:始終豎屏顯示
landscape:始終橫屏顯示
android:configChanges屬性:
orientation:消除橫豎屏影響
keyboardHidden:消除鍵盤影響
screenSize:消除屏幕大小影響
1、android:configChanges設置orientation或orientation|keyboardHidden或不填
橫豎屏切換生命週期:onPause()->onSaveInstanceState()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstanceState()->onResume()
2、android:configChanges設置有orientation|screenSize
橫豎屏切換不走生命週期,回調onConfigurationChanged()
啓動模式
1、standard
系統默認啓動模式,每次激活都會創建Activity放入任務棧;
使用場景:
哪個任務棧Activity啓動就在哪個任務棧;
2、singleTop
棧頂複用模式,只要棧頂沒有這個Activity就創建放入棧頂,否則複用,同時onNewIntent()被回調;
使用場景:
在當前Activity,同時收到通知,點擊通知再打開當前Activity,爲防止重複打開可使用singleTop重寫onNewIntent();其他程序調用singleTop的Activity,5.0之前與standard一樣在調用者棧中,5.0之後放入新棧。
3、singleTask
單例實例模式,只要棧中有Activity就將其提到棧頂複用,上方Activity出棧,同時回調onNewIntent();
使用場景:
一般用於首頁,調用singleTask的Activity時會把其上的Activity出棧。
4、singleInstance
單獨任務棧實例模式,只要所有棧中有Activity就能被複用,否則單獨創建任務棧放這個Activity;
使用場景(案例):
A1->A2(singleInstance),Home返回首頁後再點擊應用圖標顯示A1,A2在另一個單獨任務棧,應用圖標對應主任務棧(taskAffinity);
startActivity啓動A1->A2->A3(singleInstance)->A4,back返回到A2,再back返回A1,再back才返回A3;A1->A2->A3(singleInstance startActivityForResult)->A4,5.0以前返回順序A2,A1,A3,5.0之後A3,A2,A1;
Activity通信
1、Activity到Activity
1.1 Intent,startActivity(intent)
1.2 類靜態變量
1.3 全局變量,單獨一個靜態變量類
2、Activity到Service(案例)
2.1 Intent,startService(intent)和stopService(intent),Service#onStartCommand獲取數據
2.2 bindService,用ServiceConnection接口
3、Activity到Fragment
3.1 Bundle,Fragment#setArguments(bundle)
3.2 Fragment中定義方法,Activity直接調用