2024年android launchMode理解以及应用场景,2024年最新安卓开发面试基础

本文强调了系统化学习和对Android开发基础的深入研究的重要性,介绍了launchMode的不同模式(如standard、singleTop、singleTask、singleInstance),并指出缺乏体系化的学习会导致技术提升受限。作者提供了系统化的学习资源和建议,鼓励读者通过团队协作加速成长。
摘要由CSDN通过智能技术生成

尾声

最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

最后想要拿高薪实现技术提升薪水得到质的飞跃。最快捷的方式,就是有人可以带着你一起分析,这样学习起来最为高效,所以为了大家能够顺利进阶中高级、架构师,我特地为大家准备了一套高手学习的源码和框架视频等精品Android架构师教程,保证你学了以后保证薪资上升一个台阶。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

进阶学习视频

附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

举例引用:

AlarmClock uses standard. The user can launch multiple instances of this activity and these instances can be part of any task and anywhere in the activity stack. As a fairly simple application it doesn’t really demand tight control of its activity

闹钟的使用 standard。用户可以启动此activity的多个实例,这些实例可以是任何任务的一部分,也可以是活动堆栈中的任何地方的一部分。作为一个相当简单的应用,它并不真的需要它的activity的严格控制


3.singleTop 模式介绍

singleTop模式。它的作用几乎和standard一样。唯一不同的是,如果已经存在在栈顶在对方的任务一个同类型的活动实例,不会有任何新的activity创造,而是被发送到一个存在的activity实例通过onNewIntent() 方法的意图,即会重用该实例调用当前activity的onNewIntent() 方法。

这里写图片描述

在singleTop模式,对于新的Intent,你要负责onCreate() 和 onNewIntent() 来控制使它适用于所有的情况。

3.1 应用场景举例

这个模式的一个示例用例是一个搜索功能。我们想创造一个搜索框,它会带你到一个SearchActivity看到搜索结果。为了更好的用户体验,我们通常总是把一个搜索框,在搜索结果页面以及让用户做另一个搜索无压回。

现在想象一下,如果我们总是推出服务新的搜索结果的新searchactivity,10次搜索将产生10个新activity。这将是非常奇怪的,当你按下回来,因为你必须要10次,通过这些搜索结果activity,以获得回你的根activity。相反,如果在栈顶 searchactivity,我们最好送一个Intent的一个存在的activity实例,让它更新搜索结果。现在只会有一个searchactivity放在栈顶,你可以简单地按下按钮就回一次回到以前的活动。现在有更多的意义。

反正singleTop 作用相同的任务栈。如果你期望一个Intent被发送到一个存在的活动放置在任何其他任务的顶部,我必须让你失望,说它不工作。如果Intent是从另一个应用程序发送到singleTop activity,新的activity将推出在同一方面作为standard launchMode。

注意:5.0之前:放在对方的任务,5.0以及之后(Lollipop):一个新的任务被创建。

举例引用:

BrowserBookmarksPage uses singleTop. While there can be multiple instances of this activity, if there is already one at the top of the task’s activity stack it will be reused and onNewIntent() will be called. This way you only have to hit back once to return to the browser if the bookmarks activity is started multiple times.

浏览书签页面使用singleTop。虽然有可能是这一活动的多个实例,如果已经有一个在任务栈顶的活动将被重用和onnewintent()将被调用。这样,你只需要返回一次返回到浏览器,如果书签activity是开始多次。


4.singleTask 模式介绍

这种模式和 standard singleTop完全不同。采用singleTask launchMode 的activity是允许在系统中只有一个实例(又名Singleton)。如果系统中有一个存在的活动实例,整个任务将实例将被移动到顶部,Intent将通过onnewintent()方法交付。否则,新的activity将被创建并放置在适当的任务中。

4.1 在同一个应用中

如果没有在系统中还存在singleTask活动实例,新一将要建立简单的放在栈顶在同一个任务。

singleTask

但如果有一个存在的singleTask activity实例放在上面,会自动地破坏(以恰当的方式 生命周期触发)其他的activity,让该实例出现在栈顶。同时,一个Intent是通过的onnewintent()方法送到singleTask activity。

singleTask

在用户体验上没有一个很好的感觉,但它是这样设计的…

The system creates a new task and instantiates the activity at the root of the new task.

注意:系统创建一个新任务并实例化活动新任务的根。

但从实验中,它似乎不工作。单一任务活动仍栈顶上的任务的活动堆栈。从中我们可以看到什么dumpsys活动命令显示。

这里写图片描述


如果你想让一个活动就像描述singleTask文档:创建一个新的任务,把活动作为一根活动。你需要指定的taskAffinity属性为singleTask这样的活动。

这里写图片描述

下面是启动SingleTaskActivity 的结果示例

这里写图片描述

这里写图片描述

考虑是否使用taskAffinity的行为,这是你的工作。


4.2 与另一个应用合作

一旦一个 Intent 是从另一个应用程序发送,并且没有在系统中创建的任何活动实例,新的任务将创建一个新创建的活动作为一个根活动。

这里写图片描述

这里写图片描述

除非有一个应用程序,是一个拥有调用singleTask activity存在的任务,创造了新的活动会放在上面。

这里写图片描述

如果有任何任务存在的活动实例,整个任务将被移动到顶部和每个单独的activity在singleTask activity上的将会被销毁按照正常的生命周期。如果按下后退按钮,用户必须在返回到调用方任务之前通过堆栈中的活动进行。即先关闭图中task#1 中的activity,再回到task#2.

这里写图片描述


4.3 应用场景示例

这种模式的一个示例用例是任何一个入口点活动例如电子邮件客户端的收件箱页面或社交网络的时间轴。无论如何,你必须明智地使用这个模式,在这种模式下活动可能会被破坏。

BrowserActivity uses singleTask. There is only one browser activity at a time and it doesn’t become part tasks that send it intents to open web pages. While it might return to whatever most recently launched it when you hit back it is actually fixed at the bottom of its own task activity stack. It will share its task with activities that it launches like bookmarks

browseractivity使用singleTask。只有一个浏览器的活动的时间,它不成为一部分的任务,把它试图打开网页。虽然它可能会返回到任何最近推出的它,当你回击它实际上是固定在其自己的任务活动栈的底部。它将分享它的任务与活动,它推出像书签.


5.singleInstance 模式介绍

这种模式是相当接近singleTask,单个activity实例可以存在于系统中。不同的是任务举行这次活动,只能有一个活动。如果这种活动调用另一个活动,一个新的任务将被自动创建,以放置新的活动。同样,如果singleInstance活动被被调用,新的任务将会被创建放置这个activity。

无论如何,结果是相当奇怪的。从dumpsys提供的信息,它在系统中有两个任务,但只有一个出现在任务管理器中最新的一个决定,移动到顶部。因此,虽然有一个任务,仍然在后台工作,但我们不能切换到前台。根本没有任何意义。

这是singleInstance活动被调用同时一个activity已经存在在task 中。

singleInstance

但是在任务管理器中看不到新的task

singleInstance2

由于这项任务可能只有一个活动,我们无法切换回任务# 1了。这样做的唯一方法是重新启动的应用程序,但看来singleInstance任务将被隐藏在后台。

简单地分配taskAffinity属性到singleInstance活动使任务管理多个任务。

<activity

android:name=“.SingleInstanceActivity”

android:label=“singleInstance launchMode”

android:launchMode=“singleInstance”

android:taskAffinity=“”>

这样将看到被隐藏的task

这里写图片描述

5.1 应用场景示例

AlarmAlert uses singleInstance. Only one alert activity at a time and it is always its own task. Anything it launches (if anything) becomes part of its own new task

alarmalert使用singleInstance。只有一个警报活动在一个时间,它总是自己的任务。它启动的任何东西(如果有的话)成为它自己的新任务的一部分

这种模式很少被使用。一些真正的用例是一个用于启动或应用程序的活动,你是100%肯定只有一个活动。总之,我建议你不要使用这种模式,除非它是真的有必要。


6.Intent Flags

launchMode是规定你自己的Activity启动的行为模式,而Intent.Flag是你期望由你启动的其他的Activity是什么样的行为模式

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

launchMode是规定你自己的Activity启动的行为模式,而Intent.Flag是你期望由你启动的其他的Activity是什么样的行为模式

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值