Activity 知识点及问题点
接口
onMultiWindowModeChanged
-
定义
onMultiWindowModeChanged
是Android中Activity
类的一个回调方法。它会在活动(Activity)的多窗口模式发生改变时被调用。在Android 7.0(API级别24)及以上版本中,用户可以将应用程序置于多窗口模式,例如分屏模式或者画中画模式,当活动进入或退出这种多窗口模式时,onMultiWindowModeChanged
方法就会被触发。
-
方法签名及参数含义
- 方法签名为
public void onMultiWindowModeChanged(boolean isInMultiWindowMode)
。其中isInMultiWindowMode
参数表示活动当前是否处于多窗口模式。如果isInMultiWindowMode
为true
,则表示活动刚刚进入多窗口模式;如果为false
,则表示活动刚刚退出多窗口模式。
- 方法签名为
-
一般情况不需要特殊配置
- 通常情况下,
onMultiWindowModeChanged
方法的触发不需要在AndroidManifest.xml
文件中进行特殊配置来使它生效。只要你的应用运行在支持多窗口模式的Android设备(API级别24及以上)上,并且活动(Activity)进入或退出多窗口模式,这个方法就会被自动调用。
- 通常情况下,
-
相关属性说明
- 不过,在
AndroidManifest.xml
中有一些与多窗口模式相关的属性可以用于控制活动在多窗口环境下的行为。 android:resizeableActivity
属性 :- 这个属性用于指定活动是否可以在多窗口模式下调整大小。其默认值根据应用的
targetSdkVersion
有所不同。如果targetSdkVersion
大于等于24,默认值为true
,这意味着活动默认可以被调整大小并且onMultiWindowModeChanged
方法能够正常响应大小调整导致的模式变化;如果targetSdkVersion
小于24,默认值为false
,此时活动在多窗口模式下不会自动调整大小,并且可能影响onMultiWindowModeChanged
方法的触发逻辑(因为活动可能不会正确进入多窗口模式下的调整大小状态)。 - 示例:
- 这个属性用于指定活动是否可以在多窗口模式下调整大小。其默认值根据应用的
- 不过,在
xml
<activity
android:name=".MainActivity"
android:resizeableActivity="true">
</activity>
android:supportsPictureInPicture
属性 :- 当你希望活动支持画中画(Picture - in - Picture)这种特殊的多窗口模式时,可以设置这个属性为
true
。画中画模式是一种特殊的多窗口模式,主要用于视频播放等场景,使得视频可以在一个小窗口中继续播放,用户可以同时操作其他应用。如果你的活动支持画中画模式,当进入或退出画中画模式时,onMultiWindowModeChanged
方法也会被触发。 - 示例:
- 当你希望活动支持画中画(Picture - in - Picture)这种特殊的多窗口模式时,可以设置这个属性为
xml
<activity
android:name=".VideoPlayerActivity"
android:supportsPictureInPicture="true">
</activity>
- 使用场景
-
布局调整
- 当活动进入多窗口模式时,可能需要重新调整布局。例如,在单窗口模式下,一个新闻阅读应用的文章内容区域可能占据了大部分屏幕空间,而相关的评论区域只占一小部分。当进入多窗口模式后,可以缩小文章内容区域,使评论区域也能更合理地显示,为用户提供更好的多任务体验。
-
资源管理优化
- 在多窗口模式下,应用的资源使用方式可能需要改变。比如,视频播放应用在单窗口模式下可以以较高的分辨率和帧率播放视频,以提供更好的视觉体验。但在多窗口模式下,为了节省系统资源并保证应用的流畅性,可以降低视频的分辨率或帧率。
-
数据更新与同步
- 对于一些需要实时更新数据的应用,如股票交易应用。在单窗口模式下,可能每秒更新一次数据。当进入多窗口模式后,为了避免过多的资源占用和可能的性能问题,可以适当降低数据更新频率。
-
onConfigurationChanged
常见问题
Android解决点击桌面图标,就重新启动应用程序问题
场景:
按HOME键隐藏程序,但点击桌面图标,重新进入程序后,发现界面跟刚安装进入时是一样的,相当于程序重新初始化加载了。举个明显的例子:比如我的应用是定时器,有倒计时功能,我第一次打开程序时,已经启动了倒计时,当我按HOME键隐藏程序,让程序进入后台,之后我从桌面点击图标进入,发现倒计时重新开始了,这很明显是个bug。
原因分析:
原因很可能是intent携带的信息不一样导致的
原文链接:Android解决点击桌面图标,就重新启动应用程序问题
https://blog.csdn.net/qq15577969/article/details/107141504
java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//这是为了应用程序安装完后直接打开,按home键退出后,再次打开程序出现的BUG
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0) {
//结束你的activity
return;
}
}