- 浏览: 593863 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (669)
- oracle (36)
- java (98)
- spring (48)
- UML (2)
- hibernate (10)
- tomcat (7)
- 高性能 (11)
- mysql (25)
- sql (19)
- web (42)
- 数据库设计 (4)
- Nio (6)
- Netty (8)
- Excel (3)
- File (4)
- AOP (1)
- Jetty (1)
- Log4J (4)
- 链表 (1)
- Spring Junit4 (3)
- Autowired Resource (0)
- Jackson (1)
- Javascript (58)
- Spring Cache (2)
- Spring - CXF (2)
- Spring Inject (2)
- 汉字拼音 (3)
- 代理模式 (3)
- Spring事务 (4)
- ActiveMQ (6)
- XML (3)
- Cglib (2)
- Activiti (15)
- 附件问题 (1)
- javaMail (1)
- Thread (19)
- 算法 (6)
- 正则表达式 (3)
- 国际化 (2)
- Json (3)
- EJB (3)
- Struts2 (1)
- Maven (7)
- Mybatis (7)
- Redis (8)
- DWR (1)
- Lucene (2)
- Linux (73)
- 杂谈 (2)
- CSS (13)
- Linux服务篇 (3)
- Kettle (9)
- android (81)
- protocol (2)
- EasyUI (6)
- nginx (2)
- zookeeper (6)
- Hadoop (41)
- cache (7)
- shiro (3)
- HBase (12)
- Hive (8)
- Spark (15)
- Scala (16)
- YARN (3)
- Kafka (5)
- Sqoop (2)
- Pig (3)
- Vue (6)
- sprint boot (19)
- dubbo (2)
- mongodb (2)
最新评论
task是一个具有栈结构的容器,可以放置多个Activity实例。启动一个应用,系统就会为之创建一个task,来放置根Activity;
默认情况下,一个Activity启动另一个Activity时,两个Activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前,特别是启动其他应用中的Activity时,两个Activity对用户来说就好像是属于同一个应用;
系统task和task之间是互相独立的,当我们运行一个应用时,按下Home键回到主屏,启动另一个应用,这个过程中,之前的task被转移到后台,新的task被转移到前台,其根Activity也会显示到幕前,过了一会之后,在此按下Home键回到主屏,再选择之前的应用,之前的task会被转移到前台,系统仍然保留着task内的所有Activity实例,而那个新的task会被转移到后台,如果这时用户再做后退等动作,就是针对该task内部进行操作了。
task相关的知识,主要分以下几点:
1.Activity的affinity(亲和力)
2.Intent几种常见的flags
3.<activity>与task相关属性
affinity:
拥有相同affinity的多个Activity理论同属于一个task,task自身的affinity决定于根Activity的affinity值。
affinity在什么场合应用呢?
1.根据affinity重新为Activity选择宿主task(与allowTaskReparenting属性配合工作);
2.启动一个Activity过程中Intent使用了FLAG_ACTIVITY_NEW_TASK标记,根据affinity查找或创建一个新的具有对应affinity的task。
默认情况下,一个应用内的所有Activity都具有相同的affinity,都是从Application(参考<application>的taskAffinity属性)继承而来,而Application默认的affinity是<manifest>中的包名,我们可以为<application>设置taskAffinity属性值,这样可以应用到<application>下的所有<activity>,也可以单独为某个Activity设置taskAffinity。
例如:在系统自带的Browser中,package为com.android.browser,但是<application>却自定义一个taskAffinity属性值:
Intent几种常见的flags:
在android.content.Intent中定义了若干个flags,其中最重要的有以下几个:
1.FLAG_ACTIVITY_NEW_TASK:
当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task。注意,如果同一个应用中Activity的taskAffinity都使用默认值或都设置相同值时,应用内的Activity之间的跳转使用这个标记是没有意义的,因为当前应用task就是目标Activity最好的宿主。下面我们会通过实例进行演示这个特性:
我们新建两个项目,分别命名为appA和appB,并且分别创建FirstActivity和SecondActivity,我们准备让appB中的FirstActivity跳转到appA的SecondActivity。appA中的SecondActivity配置如下:
FLAG_ACTIVITY_NEW_TASK应该这样去理解:根据Activity Affinity判断是否需要创建新的Task,然后再创建新的Activit实例放进去。
2.FLAG_ACTIVITY_CLEAR_TOP:
当Intent对象包含这个标记时,如果在栈中发现存在Activity实例,则清空这个实例之上的Activity,使其处于栈顶。
例如:我们的FirstActivity跳转到SecondActivity,SecondActivity跳转到ThirdActivity,而ThirdActivity又跳到SecondActivity,那么ThirdActivity实例将被弹出栈,使SecondActivity处于栈顶,显示到幕前,栈内只剩下FirstActivity和SecondActivity。
这个SecondActivity既可以在onNewIntent()中接收到传来的Intent,也可以把自己销毁之后重新启动来接受这个Intent。在使用默认的“standard”启动模式下,如果没有在Intent使用到FLAG_ACTIVITY_SINGLE_TOP标记,那么它将关闭后重建,如果使用了这个FLAG_ACTIVITY_SINGLE_TOP标记,则会使用已存在的实例;
对于其他启动模式,无需再使用FLAG_ACTIVITY_SINGLE_TOP,它都将使用已存在的实例,Intent会被传递到这个实例的onNewIntent()中。
简单点理解:FLAG_ACTIVITY_CLEAR_TOP表示启动的Activity会将Task中位于其上的Activity都强制出栈,使其自身位于栈顶。在Standard模式下,如果原来的Activity栈顺序为 A -> B1 -> D, 此时D通过FLAG_ACTIVITY_CLEAR_TOP启动B,则栈顺序为A -> B2。对于同时设置了FLAG_ACTIVITY_SINGLE_TOP,则栈顺序为 A-> B1(此时回调onNewIntent()..),此时效果与Activity启动模式中的singleTask相同。
3.FLAG_ACTIVITY_SINGLE_TOP:
当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例。我们在上边的例子中也有讲到。
目前发现与Activity启动模式中的singleTop效果相同。
4.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:
如果一个Intent中包含此属性,则它转向的那个Activity以及在那个Activity其上的所有Activity都会在task重置时被清除出task(前提:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)。当我们将一个后台的task重新回到前台时,系统会在特定情况下为这个动作附带一个FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,意味着必要时重置task,这时FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET就会生效。经过测试发现,对于一个处于后台的应用,如果在主选单点击应用,这个动作中含有FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,长按Home键,然后点击最近记录,这个动作不含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,所以前者会清除,后者不会。
5.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:
这个标记在以下情况下会生效:1.启动Activity时创建新的task来放置Activity实例;2.已存在的task被放置于前台。
系统会根据affinity对指定的task进行重置操作,task会压入某些Activity实例或移除某些Activity实例。我们结合上面的CLEAR_WHEN_TASK_RESET可以加深理解。
转自:http://www.cnblogs.com/lwbqqyumidi/p/3775479.html
默认情况下,一个Activity启动另一个Activity时,两个Activity是放置在同一个task中的,后者被压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前,特别是启动其他应用中的Activity时,两个Activity对用户来说就好像是属于同一个应用;
系统task和task之间是互相独立的,当我们运行一个应用时,按下Home键回到主屏,启动另一个应用,这个过程中,之前的task被转移到后台,新的task被转移到前台,其根Activity也会显示到幕前,过了一会之后,在此按下Home键回到主屏,再选择之前的应用,之前的task会被转移到前台,系统仍然保留着task内的所有Activity实例,而那个新的task会被转移到后台,如果这时用户再做后退等动作,就是针对该task内部进行操作了。
task相关的知识,主要分以下几点:
1.Activity的affinity(亲和力)
2.Intent几种常见的flags
3.<activity>与task相关属性
affinity:
拥有相同affinity的多个Activity理论同属于一个task,task自身的affinity决定于根Activity的affinity值。
affinity在什么场合应用呢?
1.根据affinity重新为Activity选择宿主task(与allowTaskReparenting属性配合工作);
2.启动一个Activity过程中Intent使用了FLAG_ACTIVITY_NEW_TASK标记,根据affinity查找或创建一个新的具有对应affinity的task。
默认情况下,一个应用内的所有Activity都具有相同的affinity,都是从Application(参考<application>的taskAffinity属性)继承而来,而Application默认的affinity是<manifest>中的包名,我们可以为<application>设置taskAffinity属性值,这样可以应用到<application>下的所有<activity>,也可以单独为某个Activity设置taskAffinity。
例如:在系统自带的Browser中,package为com.android.browser,但是<application>却自定义一个taskAffinity属性值:
<application android:name="Browser" android:label="@string/application_name" android:icon="@drawable/ic_launcher_browser" android:backupAgent=".BrowserBackupAgent" android:taskAffinity="android.task.browser" >
Intent几种常见的flags:
在android.content.Intent中定义了若干个flags,其中最重要的有以下几个:
1.FLAG_ACTIVITY_NEW_TASK:
当Intent对象包含这个标记时,系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskActivity,将目标Activity放置于此task。注意,如果同一个应用中Activity的taskAffinity都使用默认值或都设置相同值时,应用内的Activity之间的跳转使用这个标记是没有意义的,因为当前应用task就是目标Activity最好的宿主。下面我们会通过实例进行演示这个特性:
我们新建两个项目,分别命名为appA和appB,并且分别创建FirstActivity和SecondActivity,我们准备让appB中的FirstActivity跳转到appA的SecondActivity。appA中的SecondActivity配置如下:
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="android.intent.action.APP_A_SECOND_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
FLAG_ACTIVITY_NEW_TASK应该这样去理解:根据Activity Affinity判断是否需要创建新的Task,然后再创建新的Activit实例放进去。
2.FLAG_ACTIVITY_CLEAR_TOP:
当Intent对象包含这个标记时,如果在栈中发现存在Activity实例,则清空这个实例之上的Activity,使其处于栈顶。
例如:我们的FirstActivity跳转到SecondActivity,SecondActivity跳转到ThirdActivity,而ThirdActivity又跳到SecondActivity,那么ThirdActivity实例将被弹出栈,使SecondActivity处于栈顶,显示到幕前,栈内只剩下FirstActivity和SecondActivity。
这个SecondActivity既可以在onNewIntent()中接收到传来的Intent,也可以把自己销毁之后重新启动来接受这个Intent。在使用默认的“standard”启动模式下,如果没有在Intent使用到FLAG_ACTIVITY_SINGLE_TOP标记,那么它将关闭后重建,如果使用了这个FLAG_ACTIVITY_SINGLE_TOP标记,则会使用已存在的实例;
对于其他启动模式,无需再使用FLAG_ACTIVITY_SINGLE_TOP,它都将使用已存在的实例,Intent会被传递到这个实例的onNewIntent()中。
简单点理解:FLAG_ACTIVITY_CLEAR_TOP表示启动的Activity会将Task中位于其上的Activity都强制出栈,使其自身位于栈顶。在Standard模式下,如果原来的Activity栈顺序为 A -> B1 -> D, 此时D通过FLAG_ACTIVITY_CLEAR_TOP启动B,则栈顺序为A -> B2。对于同时设置了FLAG_ACTIVITY_SINGLE_TOP,则栈顺序为 A-> B1(此时回调onNewIntent()..),此时效果与Activity启动模式中的singleTask相同。
3.FLAG_ACTIVITY_SINGLE_TOP:
当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例。我们在上边的例子中也有讲到。
目前发现与Activity启动模式中的singleTop效果相同。
4.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:
如果一个Intent中包含此属性,则它转向的那个Activity以及在那个Activity其上的所有Activity都会在task重置时被清除出task(前提:FLAG_ACTIVITY_RESET_TASK_IF_NEEDED)。当我们将一个后台的task重新回到前台时,系统会在特定情况下为这个动作附带一个FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,意味着必要时重置task,这时FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET就会生效。经过测试发现,对于一个处于后台的应用,如果在主选单点击应用,这个动作中含有FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,长按Home键,然后点击最近记录,这个动作不含FLAG_ACTIVITY_RESET_TASK_IF_NEEDED标记,所以前者会清除,后者不会。
5.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED:
这个标记在以下情况下会生效:1.启动Activity时创建新的task来放置Activity实例;2.已存在的task被放置于前台。
系统会根据affinity对指定的task进行重置操作,task会压入某些Activity实例或移除某些Activity实例。我们结合上面的CLEAR_WHEN_TASK_RESET可以加深理解。
转自:http://www.cnblogs.com/lwbqqyumidi/p/3775479.html
发表评论
文章已被作者锁定,不允许评论。
-
android BaseActivity与BaseFragment的封装
2016-05-19 15:06 10081 概述 多模块Activity+多Fragment 是开发 ... -
android ScrollView常用属性
2016-05-09 09:17 710android:scrollbars 设置滚动条显示。none ... -
android RecyclerView使用及详解
2016-05-04 10:35 28971.前言 话说RecyclerView已经面市很久,也在很多 ... -
android DialogFragment 创建对话框(官方推荐)
2016-04-29 14:22 9061、 概述 DialogFragment在android 3. ... -
android SQLite具体实例应用详解(SQLiteOpenHelper)
2016-04-18 19:24 817上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们 ... -
android SQLite3常用命令&语法
2016-04-18 19:01 618sqlite数据库只用一个文件就ok,小巧方便,所以是一个非常 ... -
android View绘制相关问题总结
2016-03-28 19:27 6831.View的绘制流程分几步 ... -
android Handler Looper MessageQueue机制的原理
2016-03-22 21:09 766andriod提供了Handler和Looper来满足线程间的 ... -
android Bitmap,BitmapFactory类图像处理
2016-03-16 16:28 2369BitMap代表一张位图,扩展名可以是.bmp或者.dib。 ... -
android 三类菜单(Option) (Context) (SubMenu)学习
2016-03-14 15:23 920在Android系统中,菜单可以分为三类:选项菜单(Optio ... -
android Sqlite数据库对象模型ORMLite框架学习
2016-03-11 15:24 710在Android项目中或多或少的都会使用数据库,为了提高我们的 ... -
android AsyncTask<参数,进度值类型,返回类型>学习
2016-03-10 14:45 1185AsyncTask和Handler对比 1 ... -
android 远程图片获取和本地缓存
2016-03-10 14:32 781概述 对于客户端——服 ... -
android onSaveInstanceState和onRestoreInstanceState学习
2016-03-10 10:08 798Android中的activity通过onSaveInst ... -
android Fragment生命周期和回退栈学习以及Fragment之间通信
2016-03-10 09:31 1533会涉及到Fragment如何产生,什么是Fragment,Fr ... -
android LruCache内存缓存学习(重写sizeOf方法)
2016-03-09 19:25 1064什么是缓存? 缓存技术原理就是把用户访问的所有对象看作一个全 ... -
android ListView中的convertView缓存及使用
2016-03-09 19:12 1708一、复用convertView 首先讲下ListView的原 ... -
android 从资源角度谈Android代码内存优化
2016-03-09 18:54 718开发人员如果在进行代码编写之前就有内存泄露方面的基础知识,那么 ... -
android startActivityForResult和setResult详情及Demo
2016-03-09 08:56 1052startActivityForResult与startAct ... -
android Toast详解以及自定义Toast例子
2016-01-28 14:15 1547Toast的用法 Toast只是一个View视图,快速的为用 ...
相关推荐
6. Intent flags:Intent还有许多标志位,如FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP等,这些标志可以影响启动组件的方式,比如是否在新的任务栈中启动、是否清除栈顶的Activity等。 7. 源码分析:深入...
Intent的Flags可以控制启动行为,比如`FLAG_ACTIVITY_NEW_TASK`用于在新的任务栈中启动Activity,`FLAG_ACTIVITY_CLEAR_TOP`用于清理栈顶的Activity并返回到该Activity。 8. **Intent的生命周期** 当一个Intent被...
在Android开发中,Intent是一个非常重要的概念,它用于在组件之间传递消息,是Android系统启动服务、启动或跳转Activity的主要手段。本篇文章将详细解释Intent的基本使用以及如何通过Intent实现在两个Activities之间...
- **Flags(标志位)**:设置Intent的运行模式,比如FLAG_ACTIVITY_NEW_TASK用于在新的任务栈中启动Activity。 3. **Intent Filter匹配过程** 当使用隐式Intent时,系统会遍历所有注册了Intent Filter的组件,...
本资料"Android应用源码之Intent.zip"包含了一份关于Intent使用的源码示例,下面将详细解释Intent的相关知识点。 1. **Intent的类型**: - 显式Intent:明确指定要启动的目标组件,通过组件的类名(ComponentName...
5. Flags:标志位,用于设置Intent的行为,如FLAG_ACTIVITY_NEW_TASK用于启动新的任务栈,FLAG_ACTIVITY_CLEAR_TOP用于重新启动目标活动并清除其上面的所有活动。 三、Intent的创建与使用 1. 创建Intent:可以通过...
2. 使用Flags:Intent的Flags可以控制Activity的启动行为,比如`FLAG_ACTIVITY_NEW_TASK`用于在新的任务栈中启动Activity,`FLAG_ACTIVITY_SINGLE_TOP`使得已存在的Activity不会被重新创建,而是调用`onNewIntent...
### Android SDK文档 Intent #### 概述 在Android开发中,`Intent` 是一个非常重要的概念,它在组件间通信中扮演着核心角色。本文档将深入探讨Android官方SDK文档中关于`Intent`的详细信息及其用法。 #### Intent...
本压缩包"AndroidIntent1 (2).zip"包含了实现代码跳转的各种示例,这将帮助我们深入理解Intent的工作原理和用法。 1. **Intent基本类型** - **显式Intent**: 显式Intent通过指定目标组件的完整类名来明确指定要...
- `Flags`用于控制Intent的执行方式,如`FLAG_ACTIVITY_NEW_TASK`可确保Intent在一个新的任务栈中运行,适用于需要独立运行的场景。 通过深入理解Intent的各个组成部分,开发者可以更加高效地利用Intent机制,构建...
- Intent的Flags用于控制启动行为,如`FLAG_ACTIVITY_NEW_TASK`创建新的任务栈,`FLAG_ACTIVITY_CLEAR_TOP`关闭所有栈顶Activity并重启目标Activity等。 8. **Intent Resolution** - 系统根据Intent的元数据...
Intent的Flags可以改变启动行为,例如FLAG_ACTIVITY_NEW_TASK用于在新的任务栈中启动Activity,FLAG_ACTIVITY_CLEAR_TOP用于清除当前Activity之上所有Activity并重启该Activity。 5. Bundle与Intent: Intent还...
5. **Intent Flags**: 设置Intent的标志,如FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP等,控制启动组件的行为,如是否新开任务栈、是否清除上层Activity等。 6. **Intent Filter**: 在AndroidManifest.xml...
Intent Flags用来控制Intent的行为,如FLAG_ACTIVITY_NEW_TASK用于启动新的任务栈,FLAG_ACTIVITY_CLEAR_TOP则会清除当前任务栈上的所有活动,只保留目标活动在栈顶。 6. **Intent创建与启动组件** 我们可以通过`...
### Android Intent 基础知识点解析 ...通过以上对Intent的基本概念、类型、创建及使用方法、属性等方面的详细介绍,相信初学者能够更好地理解和掌握Intent的使用技巧,从而更加高效地进行Android应用程序的开发。
本篇文章将全面解析Android Intent的使用及相关知识点。 首先,Intent主要有两种类型:显式Intent和隐式Intent。显式Intent通过指定组件的完整类名来直接调用目标组件,而隐式Intent则不指定具体组件,而是通过...
在实际开发中,我们还需要根据具体需求,合理利用Intent的其他特性,如添加Flags(如`FLAG_ACTIVITY_NEW_TASK`、`FLAG_ACTIVITY_CLEAR_TOP`等)、使用`EXTRA_*`参数传递数据等。记得在使用Intent时,要确保目标组件...
- Intent的FLAGs:例如FLAG_ACTIVITY_NEW_TASK用于启动新的任务栈,FLAG_ACTIVITY_CLEAR_TOP用于清除栈顶所有Activity并重定向到指定Activity。 - CATEGORY:Intent的类别,如CATEGORY_HOME表示主屏幕,CATEGORY_...
在Android应用开发中,Intent是一种强大的机制,用于在应用程序组件之间进行通信,是连接不同组件的桥梁。"ex07_activity_intent"这个压缩包文件很可能包含了一系列关于Android中Intent使用的教程或示例代码,让我们...
除了启动Activity,Intent还可用于启动Service、BroadcastReceiver,或者在Activity间传递启动选项(Flags),如开启新的任务栈(FLAG_ACTIVITY_NEW_TASK)或替换当前任务(FLAG_ACTIVITY_CLEAR_TOP)等。...