Android 多任务配置

793 阅读2分钟

本篇文章是为了了解安卓中的多任务系统,了解安卓中Task的栈结构,以及怎么配置app的多任务,模仿微信小程序。

多任务配置 在安卓手机上,当我们打开微信小程序,可以看到小程序其实是一个独立的任务,这是怎么配置的呢。

其实很简单,我们只需要在安卓项目的配置文件中,对Activity进行以下配置即可

<activity
            android:name=".MainActivity2"
            android:launchMode="singleTask"
           android:taskAffinity="com.demo.myapplication.task2" /> 

重点在这两行代码,缺一不可。

android:launchMode="singleTask"
android:taskAffinity="com.demo.myapplication.task2" 

launchMode很常见,是启动模式的一种,singleTask代表单独在一个栈中,taskAffinity就是当前的Activity所属的栈。

taskAffinity属性很少见,它实际上是有个默认值,当不指定Activity的taskAffinity时,它会先查找application标签中的值,如果application中也不存在,就会使用配置文件中的包名(package)

在安卓手机上的任务管理器中会根据taskAffinity区分不同的任务,所以我们配置很多taskAffinity,就能在手机的任务管理器中看到很多的任务。

还有另外一种动态配置的方法,可以达到同样的效果:

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

高级配置 换名称 微信中的小程序是不同的名字。可以这样设置 在Activity中进行设置:

setTaskDescription(new ActivityManager.TaskDescription("任务名"));

另一种方法在配置文件中进行设置。

 <activity
      android:name=".MainActivity2"
      android:label="任务名"/> 

换图标 任务管理器中显示的图标样式。如果不设置,就和宿主的是一样的图标。

if( Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
    setTaskDescription(new ActivityManager.TaskDescription("任务名", bitmap));
} 

同样的效果,也可以在配置文件中进行设置

 <activity
      android:name=".MainActivity2"
      android:icon="@drawable/setting"/> 

注意:名称和图标的更改如果不单独设置,就会同步app的名称和图标。