【推荐下载】android 中activity的启动模式是singleTask时清除activity的栈顶activity的生命周期小计
移动APP程序设计知到章节答案智慧树2023年烟台职业学院

移动APP程序设计知到章节测试答案智慧树2023年最新烟台职业学院绪论单元测试1.移动APP有助于通过移动渠道覆盖更多客户。
参考答案:对第一章测试1.随着智能手机的发展,移动通信技术也在不断地升级,目前应用最广泛的是4G。
参考答案:对2.Android系统创始人是安迪·鲁宾。
参考答案:对3.Android是Google公司基于Linux平台开发的手机及平板电脑操作系统。
参考答案:对4.Android的布局文件通常放在res/layout文件夹中。
参考答案:对5.关于Dalvik虚拟机的特点,下列说法错误的是()。
参考答案:运行Java字节码文件6.创建程序时,填写的Package Name表示()。
参考答案:项目的包名7.Dalvik虚拟机是Google公司自己设计用于Android平台的虚拟机,它可以简单的完成()隔离和线程管理,并且可以提高内存的使用效率参考答案:进程8.我国应用的第二代GSM系统以及北美的窄带CDMA系统属于()通信技术。
参考答案:2G9.在R.java文件中android:id属性会自动生成对应的int类型的值。
参考答案:对10.Android Studio是采用Gradle来构建项目的。
参考答案:对第二章测试1.一个应用程序默认会包含()个Activity。
参考答案:12.在线性布局文件中,把方向设置为水平方的属性是()。
参考答案:horizontal3.在下列选项中,通常用于响应用户的点击事件的控件是()。
参考答案:Button4.销毁一个活动所用的方法是()。
参考答案:finish()5.在目标Activity中,通常使用setResult方法设置返回数据。
()参考答案:对6.TextView控件通常用于在界面上显示文字信息。
()参考答案:对7.使用Intent传递数据时,可以使用putExtra()方法把参数封装到Intent中。
()参考答案:对8.当Activity执行到onStop()方法Activity不可见时,再次回到前台会执行onResume()方法和onStart()方法。
黑马程序员安卓教程:Singletop启动模式

Singletop启动模式任务栈记录了用户开启界面的轨迹,维护了用户的体验。
但是在某些特殊的任务场景,我们需要修改任务栈的创建情况。
应用场景:在“09_任务栈”中,多次点击“开启界面01”,此时MainActivity就会多次入栈,当要退出程序时,我们就必须多次点击“BACK”按钮才能清空任务栈。
浏览器“是否保存到收藏夹”,当点击“否”时,有些不道德的网站会多次弹出该界面直至用户点击“是”。
Android中,提出了相应的解决办法,即使用SingleTop的模式来启动一个Activity。
1.新建工程复制粘贴工程“09_任务栈”,命名为“10_activity启动模式-singletop”2.配置清单若要使SecondActivity在栈顶只能入栈一次,我们需要配置清单文件如例1-1:例1-1通过配置Activity的启动模式即launchMode的值来控制其入栈的次数。
当该值为“singleTop”时,系统会对SecondActivity入栈的情况加以判断,若已处栈顶则不会再次入栈,反之则允许入栈,从而有效的避免了一个Activity栈顶多次入栈的情况。
MainActivity没有配置launchMode,系统将默认该值为“standard”即标准模式。
运行程序“10_activity启动模式-singletop“,效果如图1-1所示:图1-1所示运行程序,默认启动MainActivity即页面01,此时,创建任务栈并使MainActivity入栈即01入栈。
当点击“开启界面02”,此时SecondActivity入栈,即02入栈,效果如图1-2所示:图1-2所示此时,再次点击“开启界面02”按钮,页面无反应。
任务栈仍与图1-2任务栈一致,这是因为:任务栈的顶端已经是SecondActivity了。
若接着点击“开启界面01”按钮,则任务栈会将01入栈,若继续点击“开启界面01”按钮,则任务栈会将01再次入栈,最后再点击“开启界面02”按钮,则任务栈会将02入栈,过程如图1-3所示:图1-3所示从图1-3可知:任务栈中若SecondActivity处于栈顶,则再次点击“开启界面02”按钮时,则SecondActivity 将不会入栈。
解开Android应用程序组件Activity的singleTask之谜

在Android应用程序中,可以配置Activity以四种方式来启动,其中最令人迷惑的就是"singleTask"这种方式了,官方文档称以这种方式启动的Activity总是属于一个任务的根Activity。
果真如此吗?本文将为你解开Activity的"singleTask"之谜。
在解开这个谜之前,我们先来简单了解一下在Android应用程序中,任务(Task)是个什么样的概念。
我们知道,Activity是Android应用程序的基础组件之一,在应用程序运行时,每一个Activity代表一个用户操作。
用户为了完成某个功能而执行的一系列操作就形成了一个Activity序列,这个序列在Android 应用程序中就称之为任务,它是从用户体验的角度出发,把一组相关的Activity组织在一起而抽象出来的概念。
对初学者来说,在开发Android应用程序时,对任务的概念可能不是那么的直观,一般我们只关注如何实现应用程序中的每一个Activity。
事实上,Android系统中的任务更多的是体现是应用程序运行的时候,因此,它相对于Activity来说是动态存在的,这就是为什么我们在开发时对任务这个概念不是那么直观的原因。
不过,我们在开发Android应用程序时,还是可以配置Activity的任务属性的,即告诉系统,它是要在新的任务中启动呢,还是在已有的任务中启动,亦或是其它的Activity能不能与它共享同一个任务,具体配置请参考官方文档:/guide/topics/fundamentals/tasks-and-back-stack.html它是这样介绍以"singleTask"方式启动的Activity的:The system creates a new task and instantiates the activity at the root of the new task. However, if an instance of the activity already exists in a separate task, the system routes the intent to the existing instance through a call to its onNewIntent() method, rather than creating a new instance. Only one instance of the activity can exist at a time.它明确说明,以"singleTask"方式启动的Activity,全局只有唯一个实例存在,因此,当我们第一次启动这个Activity时,系统便会创建一个新的任务,并且初始化一个这样的Activity的实例,放在新任务的底部,如果下次再启动这个Activity时,系统发现已经存在这样的Activity实例,就会调用这个Activity实例的onNewIntent成员函数,从而把它激活起来。
Activity四种启动模式(android:launchMode)

Activity四种启动模式(android:launchMode)⼀、启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Manifest.xml中的标签的android:launchMode属性设置; 启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;讲解启动模式之前,有必要先讲解⼀下“任务栈”的概念;每个应⽤都有⼀个任务栈,是⽤来存放Activity的,功能类似于函数调⽤的栈,先后顺序代表了Activity的出现顺序;⽐如Activity1-->Activity2-->Activity3。
⼆、启动模式(1)standard:每次**Activity时(startActivity),都创建Activity实例,并放⼊任务栈;(2)singleTop:如果某个Activity⾃⼰**⾃⼰,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;(3)singleTask:如果要**的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放⼊栈顶,并把该Activity以上的Activity 实例都pop;(4)singleInstance:singleInstance模式会将启动的Activity放置的不同的栈结构中。
我们看到从FirstActivity跳转到SecondActivity时,重新启⽤了⼀个新的栈结构,来放置SecondActivity实例,然后按下后退键,再次回到原始栈结构;图中下半部分显⽰的在SecondActivity中再次跳转到FirstActivity,这个时候系统会在原始栈结构中⽣成⼀个FirstActivity实例,然后回退两次,注意,并没有退出,⽽是回到了SecondActivity,为什么呢?是因为从SecondActivity跳转到FirstActivity的时候,我们的起点变成了SecondActivity实例所在的栈结构,这样⼀来,我们需要“回归”到这个栈结构。
activity四种加载模式

android中activity的四种加载模式一、何为加载模式在android的多activity开发中,activity之间的跳转可能需要有多种方式,有时是普通的生成一个新实例,有时希望跳转到原来某个activity实例,而不是生成大量的重复的activity。
加载模式便是决定以哪种方式启动一个跳转到原来某个Activity实例。
二、加载模式有哪些以及如何配置1、在android里面,activity有四种加载模式:standard, singleTop, singleTask,singleInstance 。
详细介绍在后面。
2、配置方法直接修改AndroidManifest.xml文件,如要给一个名为Act1的activity指定其加载模式为singleTask,只需添加以下语句:<activity android:name="Act1" android:launchMode="singleTask"></activity>三、四种加载模式介绍1、standard :系统的默认模式,一次跳转即会生成一个新的实例。
假设有一个activity命名为Act1,执行语句:startActivity(new Intent(Act1.this, Act1.class));后Act1将跳转到另外一个Act1,也就是现在的栈里面有Act1 的两个实例。
按返回键后你会发现仍然是在Act1(第一个)里面。
2、singleT op:singleT op 跟standard 模式比较类似。
唯一的区别就是,当跳转的对象是位于栈顶的activity(应该可以理解为用户眼前所看到的activity)时,程序将不会生成一个新的activity实例,而是直接跳到现存于栈顶的那个activity实例。
拿上面的例子来说,当Act1 为singleTop 模式时,执行跳转后栈里面依旧只有一个实例,如果现在按返回键程序将直接退出。
Android启动模式详细介绍

Android启动模式详细介绍Android 启动模式:启动模式:LaunchMode在多个Activity跳转的过程中扮演着重要的⾓⾊,它可以决定是否⽣成新的Activity实例,是否重⽤已存在的Activity实例,是否和其他Activity实例公⽤⼀个task⾥。
这⾥简单介绍⼀下任务栈task的概念,task是⼀个具有栈结构的对象,⼀个task可以管理多个Activity,启动⼀个应⽤,也就创建⼀个与之对应的task。
任务栈⾥⾯的Activity是按照先进后出的形式保存的,⽐如:你打开⼀个页⾯,在页⾯中打开另⼀个页⾯,另⼀个页⾯退出后,返回的是第⼀个打开的页⾯,这就是任务栈的简单原来。
但是在实际程序中多次页⾯跳转后,不想再回到上次打开的页⾯,这时候页⾯显⽰的启动模式就很有必要了。
Activity⼀共有以下四种launchMode启动模式:1.standard2.singleTop3.singleTask4.singleInstance我们可以在AndroidManifest.xml配置的android:launchMode属性为以上四种之⼀即可。
如图所⽰:下⾯分别介绍这四种启动模式。
这⾥要先理解栈顶的概念:只要是页⾯刚打开,不管他是什么模式的,它都是栈顶页⾯。
栈底的概念虽然书上没说,但是要理解透彻栈的模式,还是要知道有这个说法,⽐如:⾸先打开的页⾯是位于最底下的,然后后⾯打开的页⾯⼀次往上堆。
只有最底下的页⾯关闭,程序才算完成关闭。
⼀.四种启动模式的概念和理解(⼀)standard标准模式是默认的启动模式,不⽤为配置android:launchMode属性即可,当然也可以指定值为standard。
每次启动standard模式的Activity时,都创建Activity实例,并放⼊任务栈;简单的理解:如果⼏个页⾯都是standard模式启动的,那么页⾯⽆论是跳转到别的页⾯还是⾃⼰跳转到⾃⼰页⾯,跳转多少次后,就要点击多少次退出键最后才能关闭所有的。
AndroidActivity启动模式之singleTask实例详解
AndroidActivity启动模式之singleTask实例详解本⽂实例分析了Android Activity启动模式之singleTask。
分享给⼤家供⼤家参考,具体如下:前⾯的⽂章介绍了Android 活动Activity的启动模式:和。
本⽂继续介绍Activity的下⼀个启动模式:singleTask。
singleTask:当设置活动的启动模式为singleTask时,⾸先检查返回栈中是否存在当前活动,如果存在当前活动的实例,则直接使⽤当前实例,并把当前活动之上的所有活动pop出栈,即当前活动位于栈顶位置。
代码实例如下:(1)修改AndroidManifest.xml修改活动MainActivity的启动模式为singleTask,如下:<activityandroid:name=".MainActivity"android:launchMode="singleTask"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="UNCHER" /></intent-filter></activity>(2)修改MainActivity.java为了测试效果,重写onRestart⽅法:@Overrideprotected void onRestart() {super.onRestart();Log.d("MainActivity", "onRestart");}(3)修改MyActivity1.java为了测试效果,重写onDestroy⽅法:@Overrideprotected void onDestroy() {super.onDestroy();Log.d("MyActivity1", "onDestroy");}(3)重新发布,查看⽇志发布程序,进⼊MainActivity活动,点击按钮进⼊MyActivity1活动,点击按钮回到主活动MainActivity,⽇志显⽰如下:从图中可以看出,当在MyActivity1中点击按钮时,返回栈中此时存在⼀个主活动MainActivity的实例,并且在MyActivity1的下⾯,当点击时,MyActivity1出栈,实例销毁,调⽤onDestroy⽅法,⽽主活动则调⽤onRestart⽅法。
Activity四大启动模式
Activity四⼤启动模式ctivity的四种启动模式:standard、singleTop、singleTask、singleInstance为了打印⽅便,定义⼀个基础Activity,在其onCreate⽅法和onNewIntent⽅法中打印出当前Activity的⽇志信息,主要包括所属的task,当前类的hashcode,以及taskAffinity的值。
之后我们进⾏测试的Activity都直接继承该Activitypackage unchmodektdemoimport android.content.Intentimport android.os.Bundleimport android.view.MenuItemimport androidx.appcompat.app.ActionBarimport androidx.appcompat.app.AppCompatActivityopen class BaseActivity : AppCompatActivity() {lateinit var actionBar: ActionBaroverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)actionBar = supportActionBar!!actionBar?.setDisplayHomeAsUpEnabled(true)printTaskInfo(this, "onCreate")dumpTaskAffinity(this)}override fun onNewIntent(intent: Intent?) {super.onNewIntent(intent)printTaskInfo(this, "onNewIntent")dumpTaskAffinity(this)}override fun onRestart() {super.onRestart()printTaskInfo(this, "onRestart")}override fun onStart() {super.onStart()printTaskInfo(this, "onStart")}override fun onResume() {super.onResume()printTaskInfo(this, "onResume")}override fun onPause() {super.onPause()printTaskInfo(this, "onPause")}override fun onSaveInstanceState(outState: Bundle) {super.onSaveInstanceState(outState)printTaskInfo(this, "onSaveInstanceState")}override fun onStop() {super.onStop()printTaskInfo(this, "onStop")}override fun onDestroy() {super.onDestroy()printTaskInfo(this, "onDestroy")}override fun onOptionsItemSelected(item: MenuItem): Boolean {when (item.itemId) {android.R.id.home -> onBackPressed()}return super.onOptionsItemSelected(item)}}此处还需要另⼀个Kotlin⽂件package unchmodektdemoimport android.content.Contextimport android.content.Intentimport android.content.pm.PackageManagerimport android.util.Logimport androidx.appcompat.app.AppCompatActivityfun printTaskInfo(activity: BaseActivity, methodName: String) {log("$methodName: ${activity.localClassName} taskId: ${activity.taskId} hashCode: ${activity.hashCode()}")}fun log(message: String, tag: String = "LaunchMode") {Log.i(tag, message)}fun dumpTaskAffinity(activity: BaseActivity) {val info = activity.packageManager.getActivityInfo(ponentName,PackageManager.GET_META_DATA)log("taskAffinity: ${info.taskAffinity}")}/*** @param T ⽬标 Activity*/inline fun <reified T : AppCompatActivity> Context.toActivity() {startActivity(Intent(this, T::class.java))}⼀、standard——标准模式(默认模式) 这个模式是默认的启动模式,即标准模式,在不指定启动模式的前提下,系统默认使⽤该模式启动Activity,每次启动⼀个Activity都会重新创建⼀个新的实例,不管这个实例存不存在,这种模式下,谁启动了该模式的Activity,该Activity就属于启动它的Activity的任务栈。
简单介绍Android中Activity的四种启动模式
简单介绍Android中Activity的四种启动模式
在Android中每个界⾯都是⼀个Activity,切换界⾯操作其实是多个不同Activity之间的实例化操作。
在Android中Activity的启动模式决定了Activity的启动运⾏⽅式。
Activity有四种启动模式:
1. standard,默认的启动模式,只要激活Activity,就会创建⼀个新的实例,并放⼊任务栈中,这样任务栈中可能同时有⼀个Activity的多个实例。
2. singleTop,激活Activity时,如果栈顶是这个Activity,就不会创建新的实例;如果栈顶不是这个Activity,则会创建新的实例。
3. singleTask,如果栈中存在Activity的实例,则将栈中该实例以上的其他Activity的实例移除,让该Activity的实例在栈顶;如果栈中不存在实例,则创建新的实例。
4. singleInstance,多个应⽤共享Activity的⼀个实例,不论是否是同⼀个应⽤,只要是激活该Activity,都重⽤这个实例。
可以在AndroidManifest.xml中为Activity设置启动模式,具体⽅法是设置android:launchMode属性。
有的应⽤需要在两个窗体来回跳转,如A-->B,B-->A,......,这时就需要将A和B的启动模式设置为singleTask,否则按返回键时,也将在A和B两个窗体来回跳转。
以上内容是⼩编给⼤家介绍的Android中Activity的四种启动模式,希望对⼤家有所帮助!。
Android Activity 的四种启动模式 lunchMode 和 Intent.setFlags();
一.Android Activity 四种启动模式 lunchMode 在Manifest 配置文件中的属性如下:(1) android:launchMode="standard"(2)android:launchMode="singleTop"(3)android:launchMode="singleTask"(4)android:launchMode="singleInstance"二.说明:Android 中Activity 生命周期 跟Task 的关系,就是进栈出栈。
很多时候我们在Manifest 的Activiy 配置信息中没有看到lunchMode 属性,其实没有配置这个属性就是系统默认属性 android:launchMode="standard"。
同一个工程AppA 在这种模式下有AfirstActivity 启动 AsecondActivity ,启动代码是:?1 2 3 4 5 Intent intent = new Intent();intent.setClass(this , AsecondActivity.class );startActivity(intent);Log 打印如下:两个TaskId 都是98.说明两个 activity 是在同一个 任务栈 Task 中。
接下来我们让这两个Activity 不在同一个Task 中。
有两种方法实现:(1)不修改启动代码,只修改 Mnaifest 中 给AsecondActivity 配置多添加 两行代码如下:?1 2 android:launchMode="singleTask"android:taskAffinity="com.xjp"(2)修改启动代码:?1 I ntent intent = new Intent();2 3 4 5 6 7 8 // ComponentName name = new //ComponentName("com.example.appa","com.example.appa.AsecondActivity");// intent.setComponent(name);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);intent.setClass(this, AsecondActivity.class);startActivity(intent);多添加了一行?1 i ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);在修改 Mnaifest 中AsecondActivity配置多添加一行?1 a ndroid:taskAffinity="com.xjp"看Log打印:AfirstActivity taskId = 8 而 AsecondActivity TaskId = 9.所以两个 activity 不是在同一个任务栈 Task 中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
StandThreeActivity.onPause()
BaseActivity.onResume()
StandThreeActivity.onStop()
onDestory()
总的来讲,如果一个Activity的启动模式是SinleTask,在销毁栈内的其他
Activity时是从其栈顶的底部开始一个一个的销毁,直到栈顶的activity走
android中activity的启动模式是singleTask时清除activity的栈顶
activity的生命周期小计
2017/06/190安卓开发中经常会涉及到activity启动模式,当一个activity第
singleTASK时,清除栈顶的activity的时候,位于栈顶的activity的生命周期是如
onPause(),然后启动SingleTask的Activity,最后才销毁栈顶的Activity,走onStop
及onDestaory
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
StandThreeActivity
生命周期如下:
BaseActivity.onCreate()
onStart()
onResume()
onPuase()
StandOneActivity.onCreate()
onStart()
onResume()
onPause()
StandTwoActivity.onCreate()
何走完的呢?这里做一个小计:
BaseActivity的启动模式是singleTask模式
StandOneActivity
StandTwoActivity
StandThreeActivity这三个activity的启动模式都是标准模式,
启动的循序是BasStandTwoActivity-
onStart()
onResume()
onPause()
StandThreeActivity.onCreate()
onStart()
onResume()
--------------这里回到BaseActivity上
StandOneActivity.onStop()
onDestaory()
StandTwoActivity.onStop()