美文网首页半栈工程师Android 开发技术分享Android开发探索
同一个app不同activity显示多任务(仿微信小程序切换效果

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

作者: ling9400 | 来源:发表于2018-04-18 15:59 被阅读377次

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


多任务图1.jpg

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

在安卓中如何实现呢?

这里有两种方法实现:

第一种:代码动态实现

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

添加上面的两个Flag即可,有些文章说关闭的时候要使用

finishAndRemoveTask();

方法,我这边没使用该方法也没发现问题,如果存在潜在问题,知道的人麻烦告知下,谢谢!!!

第二种:在AndroidManifest.xml中配置属性

参考链接:在近期任务列表显示单个APP的多个Activity

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

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

使用上面的方法确实是实现了微信小程序多任务窗口的效果,但你会发现两个窗口在文章开头的图中的地方显示的是相同的名字,即你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才能显示图片了。
最终效果图:


T最终效果图.png

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

相关文章

网友评论

  • 远方夕阳:楼主能不能研究一下 做到细节跟微信的一模一样呢:smile:
    ling9400:@远方夕阳 这个例子是没有写完整的代码的,只是在自己的app里面实现了,不好意思,但最近发现有些手机是有你说的那种情况,杀掉子进程后,虽然主进程在任务窗口中还能看到,但点击之后会重启。
    远方夕阳:@ling9400 好的 可以把这个例子的完整代码分享一下吗 谢谢
    ling9400:@远方夕阳 我开发的APP细节已经做到跟微信的类似,只是我限制了最多显示3个,原理就是你把每个打开的activity窗口的唯一ID和它的task保存起来,然后每次启动去查询看有没有保存,如果存在就把该task移动到最前面,没有的话就重新打开就行。ActivityManager.AppTask这个类你可以去看下。
  • 远方夕阳:如果再点击一次小程序,就会打开2个相同的小程序任务,点击3次就会是3个。。。
    远方夕阳:@ling9400 如果是这样的话 又有问题咯,如果多个小程序,打开其中一个,后面点击其他的小程序都会只显示第一个
    ling9400:你可以把小程序的activity的启动模式设置成singleTask,但这种情况只会有一个任务,最好的办法是需要判断小程序的task是否存在,如果存在直接换到最前面,或者移除这个task都可以。
  • 远方夕阳:谢谢楼主分享,还有一个细节,任务栏清除小程序进程,主进程也被杀死的问题如何解决呢,而微信的主进程不会被杀死
    ling9400:@远方夕阳 杀掉小程序的进程,主进程是没有被杀掉的,我的意思你看下你的代码其他地方有没有杀掉主进程,不然是不会杀掉主进程的,其实也不能说是主进程和其他进程,因为这个操作不会产生多进程的,实际还是一个进程。
    远方夕阳:@ling9400 并没有的。你可以试一下这样的操作,滑出kill小程序进程,看看主进程还在不在
    ling9400:如果不是主动清楚主进程的话,主进程是不会被杀死的,看你是不是哪里写的有问题,主动杀进程了。

本文标题:同一个app不同activity显示多任务(仿微信小程序切换效果

本文链接:https://www.haomeiwen.com/subject/sqavkftx.html