Android开发技巧 (四) —— 多窗口模式

一、进入多窗口模式

在这里插入图片描述

在这里插入图片描述

二、多窗口模式下的生命周期

新建一个空项目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"

这样会使得应用只支持竖屏,且无法分屏。

发布了180 篇原创文章 · 获赞 16 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41205771/article/details/104456710