一、进入多窗口模式
二、多窗口模式下的生命周期
新建一个空项目
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"
这样会使得应用只支持竖屏,且无法分屏。