«

activity 的启动模式 详细实验报告。。。

时间:2024-3-2 18:12     作者:韩俊     分类: Android


activity 的启动模式有4种: “standard” (默认模式), “singleTop”,”singleTask”,”singleInstance”

四种模式的作用:

文档中解释的 intent.setFlags 中的 Flag

测试1:manifest中未设置启动模式(即使用默认的启动模式),MainActivity一开始已经有启动

    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);

结果:MainActivity 重新调用了onCreate()

测试2:manifest中设置了启动模式(singleTask),MainActivity一开始已经有启动

    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);

结果:MainActivity 调用了onNewIntent()

测试3:manifest中设置了启动模式(singleTop),MainActivity启动自己

    Intent intent = new Intent(MainActivity.this,
            MainActivity.class);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);

结果:MainActivity 调用了onNewIntent()

测试4:manifest中未设置启动模式(使用默认standard),MainActivity一开始已经有启动

    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);

结果:MainActivity 没有调用onCreate(),调用了 onNewIntent()

测试5:manifest中未设置启动模式(使用默认standard),MainActivity一开始已经有启动

    Intent intent = new Intent(TestActivity.this,
            MainActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_NEW_TASK);
    intent.putExtra("MainActivity", "abababab");
    startActivity(intent);

结果:MainActivity 调用onCreate(),没有调用onNewIntent()

总结

启动模式 singleTop 对应的Flag 是 Intent.Intent.FLAG_ACTIVITY_SINGLE_TOP

启动模式 singleTask 对应的Flag 是 Intent.Intent.FLAG_ACTIVITY_NEW_TASK

默认的启动模式(standard),当使用 flag为 Intent.FLAG_ACTIVITY_CLEAR_TOP 时会先将自己及以上的activity移除栈,再重新启动 该activity

当使用Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_SINGLE_TOP 的时候,启动模式single top 会覆盖默认的启动模式 standard。所以在移除上面的activity 的时候会调用自己的 OnNewIntent() 而不会重新 onCreate()

当使用 Intent.FLAG_ACTIVITY_CLEAR_TOP| Intent.FLAG_ACTIVITY_NEW_TASK 的时候,设置的启动模式为single task 但是当发现该activity 已经存在的时候,交给了默认的standard 处理cleartop,所以会重新onCreate() 而不会调用 onNewIntent().

这是实验结果,有什么不对的地方,请大家指出

标签: android

热门推荐