就是说在activity上下文之外(即除了activity调用的之外)调用startActivity需要FLAG_ACTIVITY_NEW_TASK属性。问题分析: Context是什么:Context描述的是一个应用程序环境的信息,这是一个抽象(abstract class)类,Android提供了该抽象类的很多具体实现类,比如我们常用的Service,Application,Activity。通过它我们可以获取应用程序的...
1.1 default 默认情况下(即没有 newtask flag),启动一个 Activity 时,被启动的 Activity 会在启动它的 Activity 的栈中创建(不管它们 taskAffinity 是否一样)。 如A 启动 B,B 会在 A 的栈中被创建。 1.2 单独 singletop activity 在前台(当前显示的栈的栈顶),不创建,它自己 onNewIntent 被调用 activity ...
FLAG_ACTIVITY_NEW_TASK使用场景及原理简析 在非Activity(比如Service,BroadcastReceiver)中startActivity需要添加flagIntent.FLAG_ACTIVITY_NEW_TASK。否则会报Crash:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. 原文地址...
在framework中回退mainHome是通过startActivity方式打开mainHome的(我们的android platform是自己定制的,对按键重新设计,可能和原生系统不一样),然后通过一个HotKey(就是一个外设的某一个按键)打开B,打开方式为StartActivity 设置两个Flag 分别是 FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_NEW_TASK,此时奇怪的事情...
1. Task是包含一系列Activity的堆栈, 遵循先进后出原则. 2. Task默认行为: (1) 前提: Activity A和Activity B在同一个应用中. 操作: Activity A启动开僻Task堆栈(堆栈状态: A), 在Activity A中启动Activity B(堆栈状态: AB), 按下BACK返回键(堆栈状态: A). ...
众所周知 Android 中 Activity 有四种启动模式,决定了是否创建新的 Activity 实例或复用当前实例。但是实际上 Activity 的启动十分复杂,不单单是android:launchMode就能决定的,多个 Intent Flag 都能改变启动的行为模式,除此之外还会根据android:taskAffinity的值来判断对应任务栈是否存在。
Intent intent = new Intent(getApplicationContext(), BackgroundActivity.class); // 如果当前activity关闭了,现在栈里没有了activity,由服务中去开启一个新的activity时需要给其创建一个新的标识 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);...
标记了FLAG_ACTIVITY_NEW_TASK,就一定会创建一个新的TASK吗,实验证明这是一个必要条件,还要结合taskAffinity来看, A .如果和H5Activity 具有相应的亲戚存在了,那么只是会把H5Activity 加入的亲缘的TASK中 B. 如果和H5Activity 没有对应的亲缘关系的TASK,那么就会创建一个新的TASK了 public static void s... 查看...
在Android中,flag_activity_new_task是一个Activity的标志位,用于指定该Activity应该在一个新的任务中启动。 当设置了flag_activity_new_task标志位时,Android系统会在启动该Activity时创建一个新的任务,并将该Activity置于新任务的顶部。这意味着该Activity将成为新任务的根Activity,并且该任务将不会与之前的任务有...
最近遇到了一个小问题,在我使用了多种Activity启动模式的时候,重新打开其中的一个Activity会启动另一个我已经停止的Activity,从而调用了一些已经失效的方法导致程序崩溃。 1 问题重现 由于项目工程复杂,Activity名称不够直观,我新建了一个ActivityTaskTest 工程来重现遇到的问题。