一、進入多窗口模式
二、多窗口模式下的生命週期
新建一個空項目
day23_ispf
多窗口模式並不會改變原有活動的生命週期,只是會將最近交互過的那個活動設置爲運行狀態,另一個可見的活動設置爲暫停態
修改主活動:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "第一個項目";
@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: 停止態變爲運行態");
}
}
將這個項目拷貝一份,並將新項目改名爲第二個項目,舊項目改名爲第一個項目,在模擬器安裝兩個項目
1、分別安裝啓動
啓動1
啓動2
2、調試
按下OverView
:
將2切到上分屏,發現項目2活動被銷燬重建,到準備交互,最後又到暫停態:
將項目1切到下分屏, 發現項目1活動被銷燬重建,到準備交互:
項目2也被激活交互
此時的截屏:
接下來隨意切換分屏大小,發現兩個項目都會經歷如下過程:
onPause: 準備啓動或恢復另一個活動
onStop: 活動完全不可見
onDestroy: 活動銷燬前
onCreate: 第一次被創建
onStart: 不可見變爲可見
onResume: 準備交互
橫豎屏也會發生上述變化,這裏不再深究,因爲只有其中一個活動會經歷如上過程。。。
三、改變行爲
1、重新創建
活動進入多窗口模式會被重新創建,如果想改變默認行爲,就修改AndroidManifest.xml
:
<activity android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize|screenLayout">
這樣就不會重新創建活動,而是會將平米發生變化的事件通知到Activity.onConfigurationChanged()
,屏幕發生變化時要執行相應的邏輯重寫此方法即可
2、禁用多窗口
只需要在AndroidManifest.xml
文件的<application>
或<activity>
中添加如下屬性即可:
android:resizeableActivity = "false"
這個屬性在sdk24和以上才能生效,否則無法生效
那麼24以下的怎麼辦呢,只要加入一個屬性即可生效:
android:screenOrientation = "portrait"
這樣會使得應用只支持豎屏,且無法分屏。