当前位置: 首页 > 科技观察

仿安卓微信小程序实现小程序独立任务视图的效果

时间:2023-03-14 01:22:54 科技观察

今天给大家分享一个很有意思的技术,如何在我们的App中实现类似微信小程序的功能。哈哈,开玩笑的,如果我能徒手实现一个微信小程序系统,我早就被腾讯挖去当架构师了。相信现在大家都用过小程序吧?许多人甚至每天都使用它们。小程序非常方便,无需下载安装,微信打开即可使用。随取随用,不占用手机存储空间。而Android上的微信小程序,又特别像一个真实的应用。你为什么这么说?因为Android上的每个微信小程序甚至可以有自己的任务视图,就像一个真正独立的应用程序。点击手机任务栏按钮,可以看到如下界面:美团外卖、微博热搜、星巴克都是上图中的小程序。如果有独立的任务视图,可以更方便的在多个小程序或微信本体之间快速切换。在这方面,安卓的体验要好于iOS。那么问题来了,这个依附于其他程序的小程序如何拥有独立的任务视图呢?在本文中,我们将一探究竟。其实这是一个很基础的功能。它有多基本?任何Android开发者在入门的时候肯定都学过这个知识:LaunchMode。因此,我不会在这里解释启动模式。如果你没有听说过LaunchMode,建议参考《第一行代码 第3版》的第3章。我们都知道Android中Activity有四种启动模式:standard、singleTop、singleTask和singleInstance。从字面上看,singleTask的意思是启用一个单独的任务来存放当前的Activity。但是如果你把一个Activity声明为singleTask,你会发现得不到我们想要的效果,所有的Activity还是放在了同一个task中。这是因为singleTask还与一个名为taskAffinity的属性相关联。只有声明为singleTask的Activity和它的taskAffinity值也是独立的,那么这个Activity就会被放在一个单独的任务中。默认情况下,每个Activity的taskAffinity属性值都是当前应用的包名,也就是说它们的值是一样的,所以得不到我们想要的效果。那么解决方法也很简单,给每个需要开启独立任务视图的Activity分配不同的taskAffinity值即可。接下来,我们开始实践吧。首先创建一个名为MiniProgramTest的项目。接下来,创建3个空的Activity,分别命名为FirstActivity、SecondActivity和ThirdActivity。然后编辑项目的activity_main.xml布局文件,在里面添加3个按钮分别启动FirstActivity、SecondActivity和ThirdActivity:id:layout_totoTopOf="parent"/>布局文件定义完成,修改MainActivity代码,添加启动逻辑:classMainActivity:AppCompatActivity(){overridefunonCreate(savedInstanceState:Bundle?){super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)valfirstBtn=findViewById