FLAG_ACTIVITY_NEW_TASK有用吗

在Android开发中,我们经常会需要通过Context对象来启动一个Activity。如果Context对象不是Activity,则需要给Intent对象添加flag: FLAG_ACTIVITY_NEW_TASK。 这个是大家都知道的,原因大家也可以直接说出来,Activity对象包含任务栈信息,可以直接在任务栈中启动新的Activity,其他Context对象则不行,不加FLAG_ACTIVITY_NEW_TASK,会直接导致crash。

但是如果只是添加了FLAG_ACTIVITY_NEW_TASK,并不能保证Activity会在新的task中被启动。拉起该Activity的时候,点击返回,你会发现,之前的task也被拉到了前台。这说明,新的Activity也在旧的task中被启动了。

如何保证Activity在新的task中启动

很简单。taskAffinity + FLAG_ACTIVITY_NEW_TASK, 缺一不可。

如何保证Activity不在旧的,或者说默认的task 中被启动呢。这就需要用到 taskAffinity 属性 + FLAG_ACTIVITY_NEW_TASK。taskAffinity属性在清单文件里设置,属性值是关于task的亲和性。不设置改属性,新启动的Activity,就会跟启动它的Activity在同一个task中。

之前做过一个全局对话框,所谓对话框,就是一个dialog主题的Activity。他要求可以在系统在桌面时出现。这个时候,就肯定不能在就任务栈中启动,否则会拉着之前的Activity一起出现。
这里不介绍全局对话框的实现了,重点说明如何调起。
demo的代码:

public class MainActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        new Handler().postDelayed(new Runnable() {            @Override            public void run() {                Intent intent = new Intent(context, getDialogActivityClass());                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                MainActivity.this.startActivity(intent);            }        }, 3000);    }}

实验很简单,打开MainActivity,迅速返回桌面,3秒后由MainActivity启动全局对话框Activity。
效果如下:

完美。

android:taskAffinity="cn.lankton.globaldialog

如果 tastAffinity没有设置, 或者 启动时没有添加 FLAG_ACTIVITY_NEW_TASK, 都会发生以下情况

作为启动者的MainActivity也被拉到前台了。
这肯定不是我们想看到的。

通过MainActivity.this.getApplicationContext(),启动全局对话框,结果完全与上面一致(除了不加NEW_TASK会crash)。 说明在Context对象非Activity的情况下,即使用了NEW_TASK,在不设置tastAffinity的情况下,新Activity也会被丢进默认task。

更多相关文章

  1. Android里监视数据库的变化[转]
  2. Android--AIDL学习
  3. Android入门:Activity四种启动模式
  4. Android(安卓)Context完全解析
  5. Android之网络开发详解
  6. LeakCanary的使用
  7. Android(安卓)组件之Service解析
  8. Android(安卓)ProgressDialog工具类
  9. Android命令行启动app应用

随机推荐

  1. Android底部导航栏最常用的两种写法
  2. android imageView详解
  3. [Android]Eclipse连不上模拟器的问题[emu
  4. android中获取string字符串的方法
  5. android 将程序设置为app2sd
  6. Android-View-Attribute
  7. Android 中.aar文件生成方法与用法
  8. android:configChanges问题
  9. android 类似QQ 换皮肤 实现思路 apk资源
  10. Android系统底层架构【译】