android 类似微信小程序多任务窗口 及 设置 TaskDescription 修改 icon 和 label
程序员文章站
2022-08-29 12:37:12
1.启动 一个独立窗口//绑定唯一标识 tag,存在 则根据 taskId 移动到前台if (AppManager.getInstance().isActive(tag)) { AppManager.getInstance().resumeActivty(tag);} else { Intent intent = new Intent(context, MyActivity.class); //打开多任务窗口 flags intent.addFlags(Inten...
<!-- 根据taskId 调整 activity 到前台 (配合使用)-->
<uses-permission android:name="android.permission.REORDER_TASKS" />
<-- 必须使用 standard 启动模式 -->
<activity android:name=".MyActivity" android:launchMode="standard" />
1.启动 一个独立窗口
//绑定唯一标识 tag,存在 则根据 taskId 移动到前台
if (ActManager.getInstance().isActive(tag)) {
ActManager.getInstance().resumeActivty(tag);
} else {
Intent intent = new Intent(context, MyActivity.class);
//打开多任务窗口 flags
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
intent.putExtra("tag", tag);
context.startActivity(intent);
}
2.动态设置 activity 的 icon 和 label(如不需要动态设置 ,则在 AndroidManifest.xml activity 标签下写死即可)
Bitmap iconBitmap;
int iconResId;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//设置 任务列表 的 label 和 icon,两种方式(部分机型设置icon无效)
setTaskDescription(ActivityManager.TaskDescription("activity标题",iconResId));
//该方法在Api 28 已弃用
//setTaskDescription(ActivityManager.TaskDescription("activity标题",iconBitmap));
}
3.另外 activity 需要在onCreate 方法调用时,把当前activity 缓存管理起来(可继承一个BaseActivity)
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//缓存当前activity
ActManager.getInstance().add(this);
}
4.配合使用(根据需求而定)
/**
* 把Activity添加到管理中
*/
public void add(Activity activity) {
if (activity != null) {
//如果是 MyActivity 则缓存起来
if (activity instanceof MyActivity) {
String tag = ((MyActivity) activity).getTag();
//存入内存中
mArrayMap.put(tag, activity);
}
}
}
/**
* 判断 tag绑定的 MyActivity是否存在
*/
public boolean isActive(String tag) {
Activity activity=mArrayMap.get(tag);
if (activity != null) {
//判断是否为 MyActivity,如果已经销毁,则移除
if (activity.isFinishing() || activity.isDestroyed()) {
mArrayMap.remove(tag);
return false;
} else {
return true;
}
} else {
return false;
}
}
/**
* 找到tag 绑定的 MyActivty ,通过 getTaskId() 移动到前台
*/
public void resumeActivty(String tag) {
Activity activity=mArrayMap.get(tag);
if ( activity!= null && !activity.isFinishing() && !activity.isDestroyed()) {
ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
//返回启动它的根任务(home 或者 MainActivity)
am.moveTaskToFront(activity.getTaskId(), ActivityManager.MOVE_TASK_NO_USER_ACTION);
}
}
/**
* 结束指定Activity
*/
public void finish(Activity activity) {
try {
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
//根据tag 移除 MyActivity
if (activity instanceof MyActivity) {
Strnig tag= ((MyActivity) activity).getTag();
mArrayMap.remove(tag);
}
activity.finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
本文地址:https://blog.csdn.net/qq_29364417/article/details/109379915
下一篇: 全国前100名独立学院排行榜