Intent的Flag总结
来源:互联网 发布:linux服务启动关闭管理 编辑:程序博客网 时间:2024/06/11 13:41
最近在项目的开发中通过使用Intent.setFlag()使得开发得到了很大的方便,所以对常用的Flag做了一下总结。
首先下面是Android源码中对于setFlag方法的解释
/** * Set special flags controlling how this intent is handled. Most values * here depend on the type of component being executed by the Intent, * specifically the FLAG_ACTIVITY_* flags are all for use with * {@link Context#startActivity Context.startActivity()} and the * FLAG_RECEIVER_* flags are all for use with * {@link Context#sendBroadcast(Intent) Context.sendBroadcast()}. * * <p>See the * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back * Stack</a> documentation for important information on how some of these options impact * the behavior of your application. * * @param flags The desired flags. * * @return Returns the same Intent object, for chaining multiple calls * into a single statement. * * @see #getFlags * @see #addFlags * * @see #FLAG_GRANT_READ_URI_PERMISSION * @see #FLAG_GRANT_WRITE_URI_PERMISSION * @see #FLAG_GRANT_PERSISTABLE_URI_PERMISSION * @see #FLAG_GRANT_PREFIX_URI_PERMISSION * @see #FLAG_DEBUG_LOG_RESOLUTION * @see #FLAG_FROM_BACKGROUND * @see #FLAG_ACTIVITY_BROUGHT_TO_FRONT * @see #FLAG_ACTIVITY_CLEAR_TASK * @see #FLAG_ACTIVITY_CLEAR_TOP * @see #FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET * @see #FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS * @see #FLAG_ACTIVITY_FORWARD_RESULT * @see #FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY * @see #FLAG_ACTIVITY_MULTIPLE_TASK * @see #FLAG_ACTIVITY_NEW_DOCUMENT * @see #FLAG_ACTIVITY_NEW_TASK * @see #FLAG_ACTIVITY_NO_ANIMATION * @see #FLAG_ACTIVITY_NO_HISTORY * @see #FLAG_ACTIVITY_NO_USER_ACTION * @see #FLAG_ACTIVITY_PREVIOUS_IS_TOP * @see #FLAG_ACTIVITY_RESET_TASK_IF_NEEDED * @see #FLAG_ACTIVITY_REORDER_TO_FRONT * @see #FLAG_ACTIVITY_SINGLE_TOP * @see #FLAG_ACTIVITY_TASK_ON_HOME * @see #FLAG_RECEIVER_REGISTERED_ONLY */ public Intent setFlags(int flags) { mFlags = flags; return this; }
这段英文也还比较容易看明白,它说FLAG_ACTIVITY_*是用于Context.startActivity(),FLAG_RECEIVER_*是用于Context.sendBroadcast(),然后下面列举了一些常量,点击常量可以跳转到常量的声明的地方,可以看到常量的解释。我们就看看它列举的一些常用常量分别表示什么含义。
FLAG_FROM_BACKGROUND
表示这个intent可以通过一个来自后台的操作去调用它,不是直接与用户交互的。
FLAG_ACTIVITY_CLEAR_TASK
/**
* If set in an Intent passed to {@link Context#startActivity Context.startActivity()},
* this flag will cause any existing task that would be associated with the
* activity to be cleared before the activity is started. That is, the activity
* becomes the new root of an otherwise empty task, and any old activities
* are finished. This can only be used in conjunction with {@link #FLAG_ACTIVITY_NEW_TASK}.
*/
如果在使用Context.startActivity的时候设置这个flag,将导致这个栈中任何与此Activity相关联的栈都被清除,在这个Activity启动成功之前。所以这个Activity就成了一个新栈中最底层的Activity,其他的所有的旧的Activity都被结束掉了。这个只能与FLAG_ACTIVITY_NEW_TASK一起使用。
例如我有MainActivity,AActivity,BActivity,CActivity,DActivity,跳转顺序main-->A-->B-->C--D,我在DActivity里跳转到BActivity里。跳转代码如下:
intent = new Intent(this, BActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
在BActivity里按返回键程序就直接退出了。这表示此时任务栈里只有BActivity了。
FLAG_ACTIVITY_CLEAR_TOP
还是刚刚的例子,跳转顺序main-->A-->B-->C--D,我在DActivity里跳转到BActivity里,如果intent设置的flag是FLAG_ACTIVITY_CLEAR_TOP的话,此时任务栈里的C和D会被清除掉,此时任务栈里只剩下Main、A、B,这3个Activity。另外如果BActivity的launchMode是singleTask或singleInstance或singleTop的话,此时B界面保存的内容还在,并且会回调onNewIntent方法。如果BActivity的launchMode是standard的话BActivity保存的内容已经没有了,也没有回调onNewIntent()的方法,它是结束了之前的BActivity在重新创建了一个BActivity。
FLAG_ACTIVITY_NO_HISTORY
还是上面的例子,跳转顺序main-->A-->B-->C--D,如果在B-->C的时候Intent设置的Flag是FLAG_ACTIVITY_NO_HISTORY,那么,在D按返回键的时候回直接退回到B界面。C没有存在任务栈中。
FLAG_ACTIVITY_SINGLE_TOP
Intent设置了这个Flag的,相当于目标Activity设置了SingleTop
- Intent的Flag总结
- Intent对象中内置的Flag总结
- Intent的Flag
- Intent的Flag
- Intent的Flag属性
- Android的Intent Flag
- intent的flag标志
- Activity加载模式及Intent的FLAG使用总结
- Activity加载模式及Intent的FLAG使用总结
- Intent对象内置的Flag
- Android Intent Flag的介绍
- 常用的Intent Flag 说明
- Intent 传递的flag基本常识
- Android Intent Flag的介绍
- Android Intent Flag的介绍
- Intent对象内置的Flag
- Android Intent Flag的介绍
- Android Intent Flag的介绍
- 2016全国房价趋势
- android linux kernel debug技术
- 5.3.4 贝塞尔样条曲线
- mysql笔记十——数据库分页技术(再分页,模糊查询)
- Hibernate中OneToOne延时加载的问题-现象和原因
- Intent的Flag总结
- atof字符串转换函数应用实例
- Android Studio 设置文档注释快捷键
- Java中的public、protected、default和private的区别
- JavaScript权威指南—从笨鸟到菜鸟 (七) 文本(转义字符)
- Android ANR产生原因和解决办法
- 画笔
- Java Web学习(39):Listener学习(三)
- Shiro的permission管理,用户的认证和授权