下拉狀態(tài)欄生命周期
下拉通知欄對Activity的生命周期沒有影響。
onPause()是否調用的關鍵就是艘款,是否有另一個Activity參與進來了持际。
而網(wǎng)上流傳甚廣的onPause()和onStop()調用中提到的“遮擋”,應該修正為“被Activity遮擋”
PS: 根據(jù)AlertDialog和Toast的源碼哗咆,可以發(fā)現(xiàn)它們顯示的原理蜘欲,都是通過WindowManager.addView()來顯示的。也就是說晌柬,AlertDialog和Toast可以看做是當前Activity的一部分View姥份,當然也不會對Activity的生命周期構成影響郭脂。
多窗口生命周期
我們都知道,使用多窗口的時候應用界面就會縮小很多澈歉,我們需要考錄不同屏幕尺寸的適配模式展鸡,所以盡量不要出現(xiàn)屏幕尺寸變化過大界面無法正常顯示的情況~
那么,
既然多窗口這么煩啊哈哈埃难,
我們如何禁用呢莹弊?
禁用多窗口
resizeableActivity
在targetSdkVersion
為24以上才起作用,否則該屬性無效涡尘。
// Application中
// false表示禁用箱硕,默認為true
android:resizeableActivity="false"
當targetSdkVersion
低于24時,活動不允許橫豎屏切換悟衩,應用也將不支持多窗口模式剧罩。
// 在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同上
啟動FirstApp
FirstApp:onCreate() -> onStart() -> onResume()
當FirstApp處于onResume()狀態(tài)時惠昔,進入多窗口模式,MainActivity經(jīng)歷了重新創(chuàng)建的過程挑势。
FirstApp:onPause() -> onStop() -> onDestory() -> onCreate() -> onStart() -> onResume() ->onPause()
啟動SecondApp
SecondApp:onCreate() -> onStart() -> onResume()
操作FirstApp
SecondApp:onPause()
FirstApp:onResume()
PS
- 最好不要在活動的
onPause()
方法中處理視頻播放器的暫停镇防,應該在onStop()
總進行處理,在onStart()
中回復視頻播放潮饱。 - 在
AndroidManifest.xml
這對活動進行配置来氧,活動不會被重建。將屏幕變化通知到Activity中的onConfigurationChanged()
方法中香拉。
// activity中
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout"