Activity的singleTask怎么使用

这篇文章主要讲解了“Activity的singleTask怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Activity的singleTask怎么使用”吧!

创新互联专注于企业网络营销推广、网站重做改版、博野网站定制设计、自适应品牌网站建设、html5商城网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为博野等各大城市提供网站开发制作服务。

首先是获得用来启动Activity的Intent的Flags,并且保存在launchFlags变量中。

这里,launcFlags的Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP位没有置位。

因此,notTop为null。

接下来的这个if语句:

[java] view plaincopy if (sourceRecord == null) { ...... } else if (sourceRecord.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE)  ...... } else if (r.launchMode == ActivityInfo.LAUNCH_SINGLE_INSTANCE || r.launchMode == ActivityInfo.LAUNCH_SINGLE_TASK) { // The activity being started is a single instance... it always // gets launched into its own task. launchFlags |= Intent.FLAG_ACTIVITY_NEW_TASK; }

这里变量r的类型为ActivityRecord,它表示即将在启动的Activity,在这个例子中,即为SubActivity,因此,这里的 r.launchMode等于ActivityInfo.LAUNCH_SINGLE_TASK,于是,无条件将launchFlags的 Intent.FLAG_ACTIVITY_PREVIOUS_IS_TOP位置为1,表示这个SubActivity要在新的任务中启动,但是别急,还 要看看其它条件是否满足,如果条件都满足,才可以在新的任务中启动这个SubActivity。

接下将addingToTask变量初始化为false,这个变量也将决定是否要将SubActivity在新的任务中启动,从名字我们就可以看出, 默认不增加到原有的任务中启动,即要在新的任务中启动。这里的r.launchMode ==  ActivityInfo.LAUNCH_SINGLE_TASK条成立,条件r.resultTo ==  null也成立,它表这个Activity不需要将结果返回给启动它的Activity。于是会进入接下来的if语句中,执行:

[java] view plaincopy ActivityRecord taskTop = r.launchMode != ActivityInfo.LAUNCH_SINGLE_INSTANCE  ? findTaskLocked(intent, r.info)  : findActivityLocked(intent, r.info)

这里的条件r.launchMode !=  ActivityInfo.LAUNCH_SINGLE_INSTANCE成立,于是执行findTaskLocked函数,这个函数也是定义在 frameworks/base/services/java/com/android/server/am/ActivityStack.java文件中:

[java] view plaincopypublic class ActivityStack {     ......     /**     * Returns the top activity in any existing task matching the given     * Intent. Returns null if no such task is found.     */     private ActivityRecord findTaskLocked(Intent intent, ActivityInfo info)     {     ComponentName cls = intent.getComponent();     if (info.targetActivity != null) {     cls = new ComponentName(info.packageName, info.targetActivity);     }     TaskRecord cp = null;     final int N = mHistory.size();     for (int i=(N-1); i>=0; i--) {     ActivityRecord r = (ActivityRecord)mHistory.get(i);     if (!r.finishing && r.task != cp     && r.launchMode != ActivityInfo.LAUNCH_SINGLE_INSTANCE) {     cp = r.task;     //Slog.i(TAG, "Comparing existing cls=" +     r.task.intent.getComponent().flattenToShortString()     // + "/aff=" + r.task.affinity + " to new cls="     // + intent.getComponent().flattenToShortString() + "/aff=" +     taskAffinity);     if (r.task.affinity != null) {     if (r.task.affinity.equals(info.taskAffinity)) {     //Slog.i(TAG, "Found matching affinity!");     return r;     }     } else if (r.task.intent != null     && r.task.intent.getComponent().equals(cls)) {     //Slog.i(TAG, "Found matching class!");     //dump();     //Slog.i(TAG, "For Intent " + intent + " bringing to top: " +     r.intent);     return r;     } else if (r.task.affinityIntent != null     && r.task.affinityIntent.getComponent().equals(cls)) {     //Slog.i(TAG, "Found matching class!");     //dump();     //Slog.i(TAG, "For Intent " + intent + " bringing to top: " +     r.intent);     return r;     }     }     }     return null;     }     ......     }

感谢各位的阅读,以上就是“Activity的singleTask怎么使用”的内容了,经过本文的学习后,相信大家对Activity的singleTask怎么使用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!

当前标题:Activity的singleTask怎么使用
文章出自:https://www.cdcxhl.com/article10/jdccgo.html

成都网站建设公司_创新互联,为您提供网站制作电子商务搜索引擎优化网站设计公司移动网站建设品牌网站制作

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都seo排名网站优化