下拉狀態(tài)欄生命周期
下拉通知欄對(duì)Activity的生命周期沒有影響。
onPause()是否調(diào)用的關(guān)鍵就是,是否有另一個(gè)Activity參與進(jìn)來(lái)了。
而網(wǎng)上流傳甚廣的onPause()和onStop()調(diào)用中提到的“遮擋”,應(yīng)該修正為“被Activity遮擋”
PS: 根據(jù)AlertDialog和Toast的源碼,可以發(fā)現(xiàn)它們顯示的原理,都是通過WindowManager.addView()來(lái)顯示的。也就是說,AlertDialog和Toast可以看做是當(dāng)前Activity的一部分View,當(dāng)然也不會(huì)對(duì)Activity的生命周期構(gòu)成影響。
多窗口生命周期
我們都知道,使用多窗口的時(shí)候應(yīng)用界面就會(huì)縮小很多,我們需要考錄不同屏幕尺寸的適配模式,所以盡量不要出現(xiàn)屏幕尺寸變化過大界面無(wú)法正常顯示的情況~

那么,
既然多窗口這么煩啊哈哈,
我們?nèi)绾谓媚兀?/p>
禁用多窗口
resizeableActivity在targetSdkVersion為24以上才起作用,否則該屬性無(wú)效。
// Application中
// false表示禁用,默認(rèn)為true
android:resizeableActivity="false"
當(dāng)targetSdkVersion低于24時(shí),活動(dòng)不允許橫豎屏切換,應(yīng)用也將不支持多窗口模式。
// 在activity中,portrait表示只支持豎屏,landscape只支持橫屏
android:screenOrientation="portrait"
多窗口下的生命周期
// FirstApp
public class MainActivity extends AppCompatActivity {
private static final String TAG = "FIRST_APP";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "onPause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart");
}
}
// SecondApp同上
啟動(dòng)FirstApp
FirstApp:onCreate() -> onStart() -> onResume()
當(dāng)FirstApp處于onResume()狀態(tài)時(shí),進(jìn)入多窗口模式,MainActivity經(jīng)歷了重新創(chuàng)建的過程。
FirstApp:onPause() -> onStop() -> onDestory() -> onCreate() -> onStart() -> onResume() ->onPause()
啟動(dòng)SecondApp
SecondApp:onCreate() -> onStart() -> onResume()
操作FirstApp
SecondApp:onPause()
FirstApp:onResume()
PS
- 最好不要在活動(dòng)的
onPause()方法中處理視頻播放器的暫停,應(yīng)該在onStop()總進(jìn)行處理,在onStart()中回復(fù)視頻播放。 - 在
AndroidManifest.xml這對(duì)活動(dòng)進(jìn)行配置,活動(dòng)不會(huì)被重建。將屏幕變化通知到Activity中的onConfigurationChanged()方法中。
// activity中
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"