同一个app不同activity显示多任务(仿微信小程序切换效果)

如题,这种效果类似微信小程序显示的效果,就是打开微信跳一跳后,切换安卓多任务窗口(就是清理内存窗口),会看到如下页面

在这里插入图片描述
微信小程序会在其中显示两个单独的页面,点击跳一跳会进入跳一跳小程序,点击后面的微信,即会进入微信聊天主页面。

在安卓中如何实现呢?

这里有两种方法实现:

第一种:代码实现

即页面跳转的时候增加 Flag,

Intent intent = new Intent(this, Main2Activity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);

添加两个 Flag 即可,注意关闭的时候要使用:

 finishAndRemoveTask();

FLAG_ACTIVITY_NEW_DOCUMENT:此标志用于将文档打开到一个 基于此意图的新任务中;
FLAG_ACTIVITY_MULTIPLE_TASK:此标志用于创建新任务并将活动导入其中。

注意:使用这种方式,必须具有在清单文件中设置的 android:launchMode=“standard” 属性值(默认就是这个属性)

第二种:配置 AndroidManifest.xml

在要跳转的 Activit 配置

<activity
    android:name=".Main3Activity"
    android:documentLaunchMode="intoExisting"
    android:excludeFromRecents="true"
    android:maxRecents="3"/>

AndroidManifest.xml 中的属性:

  1. documentLaunchMode(启动模式):

intoExisting:如果之前已经打开过,则会打开之前的(类似于 Activity 的 singleTask);
always:不管之前有没有打开,都新创建一个(类似于 Activity 的 standard);
none:不会在任务列表创建新的窗口,依旧显示单个任务;
never:不会在任务列表创建新的窗口,依旧显示单个任务,设置此值会替代 FLAG_ACTIVITY_NEW_DOCUMENT 和 FLAG_ACTIVITY_MULTIPLE_TASK 标志的行为(如果在 Intent 中设置了其中一个标志)。

注:对于除 none 和 never 以外的值,必须使用 launchMode=“standard” 定义
Activity。如果未指定此属性,则使用 documentLaunchMode=“none”。

  1. excludeFromRecents:

默认为 false 。
设置为 true 时,只要你离开了这个页面,它就会从最近任务列表里移除掉。

  1. maxRecents:

设置为整型值,设置应用能够包括在概览屏幕中的最大任务数。默认值为 16。达到最大任务数后,最近最少使用的任务将从概览屏幕中移除。 android:maxRecents 的最大值为 50(内存不足的设备上为 25);小于 1 的值无效。

第二种方法由于需要写死配置,可能对于我来说作用不大,所以也没有测试,需要了解的人可以查看上面地址。

注意:这里来说下处理第一种方法的问题

使用上面的方法确实是实现了微信小程序多任务窗口的效果,但你会发现两个窗口在文章开头的图中的地方显示的是相同的名字,即你APP的名字,这里就跟小程序有区别了,下面来说下如何实现这种效果:

首先:经过测试,在manifest.xml中给要显示的activity设置android:lable,这种方法是可行的,但会相当于是固定了,不可变了。

然后:在manifest.xml中给该activity设置android:icon也是可以的,这样就实现了显示"跳一跳"文字和logo了。

最后:当然还是同样需要在代码中动态设置,不然固定死对于程序员来说有瑕疵。

在需要显示的activity中调用下面的代码即可显示不同文字

setTaskDescription(new ActivityManager.TaskDescription("跳一跳"));

聪明的程序员都会看下该方法的源码以及需要参数的构造方法,所以同时显示图片和文字以及需要适配就需要用下面的代码了

if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    
    
    setTaskDescription(new ActivityManager.TaskDescription("跳一跳", mBitmap));
}

没错,需要5.0以上才能实现,参数的构造就需要传入bitmap才能显示图片了。
最终效果图:

在这里插入图片描述

存在的问题:当添加flag打开activity之后,如果切换了任务窗口,这时返回是不能返回到之前调用startActivity的方法的页面了,如果没有切换就不会存在这个问题,微信也是一样,像微信大佬都没有解决(也可能没这个需求),反正我是没有办法滴。

猜你喜欢

转载自blog.csdn.net/zxz_zxz_zxz/article/details/130734263