`
Mr.Joe
  • 浏览: 136823 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android intent.setFlags方法中的参数值含义

阅读更多
一. intent.setFlags()方法中的参数值含义:

1.FLAG_ACTIVITY_CLEAR_TOP:例如现在的栈情况为:A B C D 。D此时通过intent跳转到B,如果这个intent添加FLAG_ACTIVITY_CLEAR_TOP标记,则栈情况变为:A B。如果没有添加这个标记,则栈情况将会变成:A B C D B。也就是说,如果添加了FLAG_ACTIVITY_CLEAR_TOP标记,并且目标Activity在栈中已经存在,则将会把位于该目标activity之上的activity从栈中弹出销毁。这跟上面把B的Launch mode设置成singleTask类似。
简而言之,跳转到的activity若已在栈中存在,则将其上的activity都销掉。

2.FLAG_ACTIVITY_NEW_TASK:例如现在栈1的情况是:A B C。C通过intent跳转到D,并且这个intent添加了FLAG_ACTIVITY_NEW_TASK标记,如果D这个Activity在Manifest.xml中的声明中添加了Task affinity,系统首先会查找有没有和D的Task affinity相同的task栈存在,如果有存在,将D压入那个栈,如果不存在则会新建一个D的affinity的栈将其压入。如果D的Task affinity默认没有设置,则会把其压入栈1,变成:A B C D,这样就和不加FLAG_ACTIVITY_NEW_TASK标记效果是一样的了。注意如果试图从非activity的非正常途径启动一个activity(例见下文“intent.setFlags()方法中参数的用例”),比如从一个service中启动一个activity,则intent比如要添加FLAG_ACTIVITY_NEW_TASK标记(编者按:activity要存在于activity的栈中,而非activity的途径启动activity时必然不存在一个activity的栈,所以要新起一个栈装入启动的activity)。
简而言之,跳转到的activity根据情况,可能压在一个新建的栈中。

3.FLAG_ACTIVITY_NO_HISTORY:例如现在栈情况为:A B C。C通过intent跳转到D,这个intent添加FLAG_ACTIVITY_NO_HISTORY标志,则此时界面显示D的内容,但是它并不会压入栈中。如果按返回键,返回到C,栈的情况还是:A B C。如果此时D中又跳转到E,栈的情况变为:A B C E,此时按返回键会回到C,因为D根本就没有被压入栈中。
简而言之,跳转到的activity不压在栈中。

4.FLAG_ACTIVITY_SINGLE_TOP:和Activity的Launch mode的singleTop类似。如果某个intent添加了这个标志,并且这个intent的目标activity就是栈顶的activity,那么将不会新建一个实例压入栈中。
简而言之,目标activity已在栈顶则跳转过去,不在栈顶则在栈顶新建activity

二.intent.setFlags()方法中参数的用例:

很多人使用startActivity时候,会碰到如下的异常:
Caused by: android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
都知道,Context中有一个startActivity方法,Activity继承自Context,重载了startActivity方法。如果使用Activity的startActivity方法,不会有任何限制,而如果使用Context的startActivity方法的话,就需要开启一个新的task(编者按:参见一.2.的编者按),遇到上面那个异常的,都是因为使用了Context的startActivity方法。解决办法是:Java代码中加一个flag,即intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。这样就可以在新的task里面启动这个Activity了。


本文转自:http://blog.csdn.net/berber78/article/details/7278408
分享到:
评论

相关推荐

    android intent跳转

    在Android开发中,`Intent`是一种非常重要的机制,它主要用于启动新的活动(Activity)或者向其他组件发送消息。通过Intent,我们可以实现Activity之间的跳转、数据传递等功能,这对于构建复杂的应用程序来说至关...

    安卓掉用第三方软件打开文件

    为了封装这个过程,你可以创建一个静态方法,接受文件路径和MIME类型作为参数,返回一个Intent对象。然后在需要调用的地方,直接调用这个方法,传入相应的参数即可。例如: ```java public static Intent ...

    unity和安卓交互调用安卓浏览器拉起应用市场

    4. 在Unity中调用C#脚本中的方法,传递参数并触发Android端的方法。 通过这样的方式,开发者可以实现Unity游戏在Android平台上调用浏览器拉起应用市场,从而实现热更新或引导用户评价等功能。这种方式既充分利用了...

    android两个app实现跳转

    但是,跳转前的App需要有权限访问目标App的Activity,这通常通过在AndroidManifest.xml中声明`<activity>`标签,并添加`<category android:name="android.intent.category.BROWSABLE" />`和`<data>`标签来实现。...

    Android UI 问题集注

    具体做法是在Activity的onCreate()方法中调用requestWindowFeature()方法,并传入Window.FEATURE_NO_TITLE作为参数,然后调用getWindow().setFlags()方法,将窗口标志设置为WindowManager.LayoutParams.FLAG_...

    android 使用download Manager实现应用下载安装

    在Android系统中,`DownloadManager` 是一个系统服务,用于管理大文件的后台下载任务,尤其适用于应用程序的下载和安装。这个服务不仅提供了方便的API,还能处理网络连接的恢复、断点续传以及自动设置通知等。在这个...

    Android实现关机与重启的几种方式(推荐)

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); // 重启 Intent intent2 = new Intent(Intent.ACTION_REBOOT); intent2.putExtra("nowait", 1); intent2.putExtra("interval", 1);...

    Android关机和重启的调用代码[借鉴].pdf

    在Android系统中,调用关机或重启的功能通常涉及到对底层Linux内核的交互。由于Android是基于Linux的,因此其关机和重启操作与Linux系统中的相应机制密切相关。以下是对标题和描述中涉及的知识点的详细说明: 1. **...

    android 常用代码汇总

    在Android开发中,为应用程序创建桌面快捷方式是一项常见的需求。下面的代码片段展示了如何实现这一功能。 ```java /** * 为程序创建桌面快捷方式 */ private void addShortcut() { Intent shortcut = new ...

    Android 如何远程下载安装的应用源码.rar

    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); } } ``` - 注意,Android 6.0(API 23)及以上版本需要在运行时请求`WRITE_EXTERNAL_STORAGE`权限。 5. **处理更新逻辑** ...

    android系统下载管理器下载文件并打开.rar

    - **请求下载**: 使用DownloadManager的enqueue方法发起下载请求,传入一个DownloadManager.Request对象,设置URL、保存路径等参数。 ```java DownloadManager.Request request = new DownloadManager.Request...

    Android 应用按返回键退向后台运行实例代码

    这个方法需要设置一个 boolean 参数,true 在任何 Activity 中按下返回键都退出并进入后台运行,false 只有在根 Activity 中按下返回键才会退向后台运行。 2、使用 Intent,返回手机主界面 ```java Intent intent =...

    android reboot 重启

    本文将详细介绍两种实现Android重启的方法:一种是通过调用shell中的`reboot`命令;另一种则是通过调用系统提供的API接口。 #### 二、调用Shell中的reboot命令 1. **命令介绍**: - 在Android设备上,可以通过...

    android 下载并安装apk的代码

    在Android系统中,下载并安装APK的过程涉及多个步骤,包括网络请求、文件保存、权限管理以及用户交互。以下是对这个过程的详细说明: 首先,我们需要一个下载管理器来处理APK文件的下载。Android系统提供了`...

    androidAPP 自动更新下载

    在Android应用开发中,自动更新功能是必不可少的一部分,它能够帮助用户及时获取应用的最新版本,提高用户体验并确保数据安全。下面将详细讲解如何使用原生的OKHttp库实现Android应用的自动更新下载,以及下载完成后...

    android 启动应用,不存在则下载,并在通知栏更新进度源码

    // 设置其他参数... long downloadId = dm.enqueue(request); // 创建并注册广播接收器 BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent ...

    android使用DownloadManager自动更新,安装apk

    在Android开发中,为了提供更好的用户体验,经常需要实现应用程序的自动更新功能。系统提供的`DownloadManager`类就是解决这个问题的一个高效且便捷的工具。本文将详细介绍如何利用`DownloadManager`来实现自动下载...

    FileProvider实现进程间资源共享

    在Android开发中,有时我们需要在不同的应用程序之间共享资源,例如安装一个新的APK文件。`FileProvider`是Android提供的一种安全的文件共享机制,它允许应用将私有文件的访问权限授予其他应用,而无需公开文件路径...

    installapp

    在Android系统中,"installapp"可能是一个涉及静默安装应用的工具或过程。静默安装是指在用户无感知的情况下,通过编程方式自动安装应用程序。这个过程通常需要系统的超级用户权限,因为它涉及到对设备的控制层面...

Global site tag (gtag.js) - Google Analytics