继该系列的第一篇和番外篇之后,今天我们来聊一聊多窗口开发的注意事项。实际上,与其说“多窗口开发”,不如说让我们的APP适应多窗口模式

可能有朋友会问,为什么要提到多窗口模式呢?

这是因为:

  1. 折叠屏在展开后的屏幕会变大,而变大带来的变化就是多窗口运行;
  2. 多窗口模式在很早之前就已经被Google官方支持,提供了相应的API,现在也到了该了解一下的时候了;
  3. 避免我们辛辛苦苦开发好的APP,翻车在多窗口的沟里;
  4. 虽然在Android Q中,多窗口模式很可能将成为默认行为,但要兼容之前的版本,我们仍然需要做一些事情。

首先我们来看一下如果我们什么都不做,切换多窗口时,会发生什么呢?仍然从生命周期的角度来解读:

失去焦点(未做兼容处理)

D/MainActivity: onPause

重新获得焦点(未做兼容处理)

D/MainActivity: onResume

注意,在默认情况下,一旦失去焦点,会回调onPause()方法。而此时Activity仍然可以被用户看到,因此,如果我们在onPause()里面做了一些不合适的操作,比如来了一个手势解锁,或者特殊情况下直接关闭程序,就明显不合适了。

为了避免这种情况出现,我们希望在失去焦点的时候不回调onPause()。那么,我们只需在AndroidManifest.xml的application节点下添加如下代码,即可规避该问题:

<meta-data
android:name="android.allow_multiple_resumed_activities"
android:value="true"/>

再次测试时,我们发现onPause()已经不会被回调了。

到这里,我们有这样一个疑问:我们失去onPause()作为得到/失去焦点的判定依据,我们用什么来得知状态呢?

很简单——借助onWindowFocusChanged()回调,即可及时获取焦点状态了。使用如下代码片进行测试:

   @Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.d(TAG, "onWindowFocusChanged - " + hasFocus);
}

使APP反复得到/失去焦点,观察Logcat输出,得到如下结果:

D/MainActivity: onWindowFocusChanged - false

D/MainActivity: onWindowFocusChanged - true

D/MainActivity: onWindowFocusChanged - false

D/MainActivity: onWindowFocusChanged - true

……

至此,问题解决。

然而,你可能还会问:如果小窗口的尺寸发生变化如何处理?

这并不困难,通过调整APP窗口大小,再次观察Logcat输出,发现onConfigurationChanged()方法被回调了。还记得我们之前提过的改变窗口大小吗?这就是一个实际的例子。该如何处理,大家心中应该有数了吧。

今天的分享就到这里,希望上面的内容能够对你有帮助。

粮草先行——Android折叠屏开发技术点(二)的更多相关文章

  1. 粮草先行——Android折叠屏开发技术点(一)

    最近有关折叠屏产品的新闻层出不穷,各家手机厂商也分别慢慢地亮出了自家的产品.然而市场上的一些APP仍然没有很好地适配这样的设备,显示不正常和应用重启的状况时有发生.因此,我会用接下来的几篇文章来点出有 ...

  2. 粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则

    上一篇文章中,我们有提到Activity在屏幕尺寸发生变更时的处理方式,总共有两种: 重启APP以适应屏幕改变: 手动处理数据,避免APP重启. 同样,这两种方式也同时适用于改变屏幕方向.更改系统语言 ...

  3. Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述—— 隐鹤 / HelloWorld

    Excel阅读模式/聚光灯开发技术之二 超级逐步录入提示功能开发原理简述———— 隐鹤  /  HelloWorld 1. 引言 自本人第一篇博文“Excel阅读模式/单元格行列指示/聚光灯开发技术要 ...

  4. 【Android】快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表[申明:来源于网络]

    [Android]快速开发偷懒必备(二) 支持DataBinding啦~爽炸,一行实现花式列表[申明:来源于网络] 地址:http://blog.csdn.net/zxt0601/article/de ...

  5. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对IM 开发做一个全面的总结. 相关推荐阅读:. Android 即时通讯 ...

  6. 是时候学习Android分屏开发了

    今年Google发布了Android N,Android N新增了不少功能,最受关注的自然就是分屏了. 这一功能对国内的很多手机用户并不陌生,其实很多第三方系统早已经实现了这一功能,如EMUI,Fly ...

  7. 【移动开发】Android中WIFI开发总结(二)

    搞了好几天终于有点眉目了,这里接着总结一下Android中WiFi的使用,在前面(http://smallwoniu.blog.51cto.com/3911954/1334951)我们已经简单了解了W ...

  8. Android网络:开发浏览器(二)——功能完善之长按网页图片菜单

    上述的历史和书签的功能已经实现.不过如果我们长时间按住图片,并不会出现如同UC中的一系列选项,我们可以来看看UC中的长按图片出现的菜单. 图10.2.9    UC中的长按图片菜单 我们可以看到UC中 ...

  9. Android网络:开发浏览器(二)——功能完善之书签功能

    经过上述的编写,基本的功能已经完成了,不过工具栏里面基本还是一片空白,只有一个刷新的功能,现在咱们就先完善这些功能(之前有朋友说来点图,那么这次我会截些图更好的来描述). 既然是浏览器,怎么能没有书签 ...

随机推荐

  1. Spring-mvc设置@RequestMapping标签更改返回头及@RequestMapping简述

    1. 引子:设置返回头 2. 简述 3. value 4. method 5. consumes/produces 6. params 7. headers 1. 引子:设置返回头 返回JSON内容时 ...

  2. HTML DOM对象的属性和方法

    HTML DOM对象的属性和方法 HTML DOM 对象有几种类型: 1.Document 类型 在浏览器中,Document 对象表示整个 HTML 文档. 1.1属性 引用文档的子节点 docum ...

  3. 【方案】mvc 保证定时器回收限制

    在项目中我们或多或少的遇到一些需要定时触发或者计算的东西,这个时候我们就需要定时器来作为解决方案.非常好思路清晰,业务逻辑完好,定时器也开好了,当我们信心满满的挂到IIS服务器的时候,发现写的定时器在 ...

  4. PAT1105:Spiral Matrix

    1105. Spiral Matrix (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue This ti ...

  5. Redis数据过期和淘汰策略详解(转)

    原文地址:https://yq.aliyun.com/articles/257459# 背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用Redis时,除 ...

  6. 在Mac OS X中配置Apache + PHP + MySQL 很详细

    这是一篇超级详细的配置mac os下面php+mysql+apache的文章.非常详细我的大部分配置就是参考上面的内容的,比如,PHP不能连接数据库,就是改一下默认的php.ini中pdo_mysql ...

  7. 对于Javascript 执行上下文的理解

    转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么 ...

  8. Java如何获取系统信息(包括操作系统、jvm、cpu、内存、硬盘、网络、io等)

    1 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包,尤其是内存信息不够准确,所以选择使用sigar获取系统信息. 下载地址:http://sourceforge ...

  9. unwrapThrowable

    package org.apache.ibatis.reflection; import java.lang.reflect.InvocationTargetException; import jav ...

  10. testng增加失败重跑机制

    注: 以下内容引自 http://www.yeetrack.com/?p=1015 testng增加失败重跑机制 Posted on 2014 年 10 月 31 日 使用Testng框架搭建自动测试 ...