网站首页 / 育儿 / 正文

android activity启动流程(全网最全Android开发笔记)

时间:2022-04-13 18:59:28 浏览:7070次 作者:用户投稿 【我要投诉/侵权/举报 删除信息】

一.先领会栈的观念(安置Activity范例的容器)

1.Task(线性表)

工作栈Task,用来安置Activity范例的容器,进步后出,重要有2个基础操纵:压栈和出栈,其所寄存的Activity是不扶助从新排序的,只能按照压栈和出栈操纵变动Activity的程序。

2.app启用时,体例会为它默许创造一个对应的Task,用来安置根Activity

ps: Activity之间不妨彼此启用,暂时运用的Activity不妨去启用其余运用的Activity(相机),那么即是说栈的功效不妨把其它app的activity介入到本人app的栈里.

以是Task不妨领会为控制处置一切用到的Activity范例的栈,然而.android5.0之后 跨过程挪用activity,这个activity会被放入到一个新的栈中。

二.启用形式(只能按照压栈和出栈操纵变动Activity的程序,以是是启用形式是以哪种模样入栈)

经过在AndroidManifest文献中的属性andorid:launchMode来树立大概经过Intent的flag来树立

1.standard(惯例模样入栈)

默许形式。在这个形式下,城市默许创造一个新的范例。所以,在这种形式下,不妨有多个沟通的范例,也允很多个沟通Activity叠加。运用场景:绝大普遍Activity。

2.singleTop(栈顶复用模样入栈)==FLAG_ACTIVITY_SINGLE_TOP

栈顶复用形式,即使要打开的activity在工作栈的顶部仍旧生存,就不会创造新的范例,而是挪用 onNewIntent() 本领。制止栈顶的activity被反复的创造。运用场景:在报告栏点击收到的报告,而后须要启用一个Activity,这个Activity就不妨用singleTop,要不历次点击城市兴建一个Activity。某个场景下贯串赶快点击,启用了两个Activity。即使这个功夫待启用的Activity运用 singleTop形式也是不妨制止这个Bug的。

3.singleTask(栈内复用模样入栈)==FLAG_ACTIVITY_CLEAR_TOP

栈内复用形式, activity只会在工作栈内里生存一个范例。即使要激活的activity,在工作栈内里仍旧生存,就不会创造新的activity,而是复用这个仍旧生存的activity,挪用 onNewIntent() 本领,而且清空这个activity工作栈上头一切的activity(CLEAR_TOP回到栈顶)。运用场景:大普遍App的网页。对于大局部运用,当咱们在主界面点击回退按钮的功夫都是退出运用,那么当咱们第一次加入主界面之后,主界面坐落栈底,此后尽管咱们翻开了几何个Activity,只有咱们再次回到主界面,都该当运用将主界面Activity上一切的Activity移除的办法来让主界面Activity居于栈顶,而不是往栈顶新加一个主界面Activity的范例,经过这种办法不妨保护退出运用时一切的Activity都能报废弃。

4.singleInstance(不入栈)

简单范例形式,所有大哥大操纵体例内里惟有一个范例生存。各别的运用去翻开这个activity 共享公用的同一个activity。他会运转在本人独立,独力的工作栈内里,而且工作栈内里惟有他一个范例生存。运用场景:呼唤复电界面。这种形式的运用情景比拟常见,在Launcher中大概运用。大概你决定你须要使Activity惟有一个范例。倡导精心运用。

5.FLAG_ACTIVITY_NO_HISTORY

Activity运用这种形式启用Activity,当该Activity启用其余Activity后,该Activity就消逝了,不会保持在Activity栈中。

三.FLAG_ACTIVITY_NEW_TASK这个属性规则是:树立此状况,开始会搜索能否生存和被启用的Activity具备沟通的亲和性的工作栈(即taskAffinity,同一个运用步调中的activity的亲和性一律),即使有,则径直把这个栈完全挪动到前台,并维持栈中的状况静止,即栈中的activity程序静止,即使没有,则兴建一个栈来寄存被启用的activity。1.getTaskId();获得暂时activity所处的栈

2.同一个运用步调中的activity的亲和性一律(taskAffinity),也即是说 Actviitya intent时setFalg(Intent.FLAG_ACTIVITY_NEW_TASK)到Activityb 然而Actviitya和Activityb 仍旧一个栈

在各别的运用中跳转才会创造新的Task。

3.在Activity左右文除外启用Activity须要给Intent树立FLAG_ACTIVITY_NEW_TASK标记,否则会报特殊。

四 FLAG_ACTIVITY_CLEAR_TASK(必需和FLAG_ACTIVITY_NEW_TASK一道运用)

清空栈内activity,只留住这个activity

版权声明:
本文内容由互联网用户自发贡献,该文观点仅代表作者本人,因此内容不代表本站观点、本站不对文章中的任何观点负责,内容版权归原作者所有、内容只用于提供信息阅读,无任何商业用途。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站(文章、内容、图片、音频、视频)有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至353049283@qq.com举报,一经查实,本站将立刻删除、维护您的正当权益。