本篇内容主要讲解"活动的单线询问有什么作用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"活动的单线询问有什么作用"吧!
这个函数无非就是根据即将要启动的子活动的任务相似性属性值在系统中查找这样的一个任务:任务的吸引力属性值与即将要启动的活动的任务相似性属性值一致。
如果存在,就返回这个工作堆栈顶端的活动回去。
在上面的AndroidManifest.xml文件中,没有配置主要活动和子活动的任务相似性属性,于是它们的任务相似性属性值就默认为父标签应用的任务相似性属性值,这里,标签应用的任务相似性也没有配置,于是它们就默认为包名,即害羞。lo。任务。
由于在启动子活动之前,主要活动已经启动,主要活动启动的时候,会在一个新的任务里面启动,而这个新的任务的吸引力属性就等于它的***个活动的任务相似性属性值。
于是,这个函数会动回表示主要活动的练习记录回去。
回到前面的startactivityyunccheckdlocked函数中,这里的taskTop就表示主要活动,它不为null,于是继续往前执行。由于条件r.launchMode==ActivityInfo .发射单任务成立,于是执行下面语句:
[Java]viewplancopytactivityrecordtop=performcleartaskslocked(ktop。任务。taskid,r,launchFlags,true);函数performcleartaskslocked也是定义在框架/基础/服务/Java/com/Android/server/am/activity stack。Java 语言(一种计算机语言,尤用于创建网站)文件中:
[Java]ViewPlainCopyPublicClassactivityStack {./* * * Performclearoperationasrequestedby * { @ LinkIn # FLAG _ ACTIVITY _ CLEAR _ TOP } :搜索前端opotofthe * stack togethegiventask,然后寻找*一个stanceofthattactivityinstatack,如果找到,完成大厅*活动,然后转到实例.* * @ paramnewardescriptionofthenewactivitybeinate .* @
p; */ private final ActivityRecord performClearTaskLocked(int taskId, ActivityRecord newR, int launchFlags, boolean doClear) { int i = mHistory.size(); // First find the requested task. while (i > 0) { i--; ActivityRecord r = (ActivityRecord)mHistory.get(i); if (r.task.taskId == taskId) { i++; break; } } // Now clear it. while (i > 0) { i--; ActivityRecord r = (ActivityRecord)mHistory.get(i); if (r.finishing) { continue; } if (r.task.taskId != taskId) { return null; } if (r.realActivity.equals(newR.realActivity)) { // Here it is! Now finish everything in front... ActivityRecord ret = r; if (doClear) { while (i < (mHistory.size()-1)) { i++; r = (ActivityRecord)mHistory.get(i); if (r.finishing) { continue; } if (finishActivityLocked(r, i, Activity.RESULT_CANCELED, null, "clear")) { i--; } } } // Finally, if this is a normal launch mode (that is, not // expecting onNewIntent()), then we will finish the current // instance of the activity so a new fresh one can be started. if (ret.launchMode == ActivityInfo.LAUNCH_MULTIPLE && (launchFlags&Intent.FLAG_ACTIVITY_SINGLE_TOP) == 0) { if (!ret.finishing) { int index = indexOfTokenLocked(ret); if (index >= 0) { finishActivityLocked(ret, index, Activity.RESULT_CANCELED, null, "clear"); } return null; } } return ret; } } return null; } ...... }
到此,相信大家对“Activity的singleTask有什么作用”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/151649.html