首页系统综合问题「flag_activity_new_task」flagactivitynewtask

「flag_activity_new_task」flagactivitynewtask

时间2022-08-02 02:53:01发布分享专员分类系统综合问题浏览140

今天小编给各位分享flag_activity_new_task的知识,文中也会对其知识点进行延伸解释,如果文章内容对您有帮助,别忘了关注本站,现在进入正文!

内容导航:

  • 为什么有时候启动Activity需要加FLAG
  • Android:PendingIntent类的getActivity()方法的最后一个参数,有的设置Intent.FLAG_ACTIVITY_NEW_TASK
  • 在android中,设置一个activity在后台运行??
  • activity的启动模式有哪些
  • Activity四种启动模式有哪些?
  • Android中怎么切换task到前台
  • 一、为什么有时候启动Activity需要加FLAG

    Activity intent经常使用的 FLAG Intent.FLAG_ACTIVITY_NEW_TASK 默认的跳转类型,会重新创建一个新的Activity,不过与这种情况,比方说Task1中有A,B,C三个Activity,此时在C中启动D的话,如果在Manifest.xml文件中给D添加了Affinity的值和Task中的不一样的话,则会在新标记的Affinity所存在的Task中压入这个Activity。如果是默认的或者指定的Affinity和Task一样的话,就和标准模式一样了启动一个新的Activity. FLAG_ACTIVITY_SINGLE_TOP 这个FLAG就相当于加载模式中的singletop,比如说原来栈中情况是A,B,C,D在D中启动D,栈中的情况还是A,B,C,D FLAG_ACTIVITY_CLEAR_TOP 这个FLAG就相当于加载模式中的SingleTask,这种FLAG启动的Activity会把要启动的Activity之上的Activity全部弹出栈空间。类如:原来栈中的情况是A,B,C,D这个时候从D中跳转到B,这个时候栈中的情况就是A,B了 FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个网上很多人是这样写的。如果activity在task存在,拿到最顶端,不会启动新的Activity。这个有可能会误导大家! 他这个FLAG其实是这个意思! 比方说我现在有A,在A中启动B,此时在A中Intent中加上这个标记。此时B就是以 FLAG_ACTIVITY_BROUGHT_TO_FRONT 这个启动的,此时在B中再启动C,D(正常启动C,D),如果这个时候在D中再启动B,这个时候最后的栈的情况是 A,C,D,B. 特别注意的是,我上面说的网上人描述的这个FLAG,会很容易让人误解成这样,A,B,C,D都是标准加载,然后我在D中启动A,这个intent加上FLAG_ACTIVITY_BROUGHT_TO_FRONT ,就会误认为变成B,C,D,A!!其实不是,这个时候应该是A,B,C,D,A.不信的人大家试试看。不过下面这个标记和这个标记就会让大家明白了! FLAG_ACTIVITY_REORDER_TO_FRONT 就按在 Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT 最后说的,如果在A,B,C,D正常启动的话,不管B有没有用FLAG_ACTIVITY_BROUGHT_TO_FRONT启动,此时在D中启动B的话,还是会变成A,C,D,B的。FLAG_ACTIVITY_NO_HISTORY用这个标记顾名思义! 意思就是说用这个FLAG启动的Activity,一旦推出,他就不会存在于栈中,比方说!原来是A,B,C 这个时候再C中以这个FLAG启动D的 , D再启动E,这个时候栈中情况为A,B,C,E。

    二、Android:PendingIntent类的getActivity()方法的最后一个参数,有的设置Intent.FLAG_ACTIVITY_NEW_TASK

    对于你的第一个问题:说明你对pendingIntent不是很理解,他是这样的,他封装了一个intent 这个intent不会立即执行, 当满足一定条件的时候才执行intent,比如nocation 当用户点击了通知栏的nocation的时候才会跳转到 应用的某一个activity

    「flag_activity_new_task」flagactivitynewtask

    三、在android中,设置一个activity在后台运行??

    这个需求违背了task stack的设计,b acticvity返回之后 弹栈就会销毁的 不能继续存在,你可以尝试用别的方法比如线程。intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);并不是设置后台运行,而是设置这个intent启动的activity优先创建一个新的task将这个activity做为该task的root。如果实在是向要在activity b中按返回的时候回到activity a 同时b不销毁,那就要重写onKeyDown回调来更改返回按钮的行为了,改为启动activity a。但是注意给a 设置 singleTask。但是不建议这么做,因为即使你要让B在后台运行,你也是要写线程的,所以最好是把要做的任务封装到一个线程里去,然后自己控制。

    四、activity的启动模式有哪些

    Activity的四种启动模式:standard:这是默认模式,每次激活Activity时都会创建Activity实例,并放入任务栈中。singleTop: 如果在任务的栈顶正好存在该Activity的实例,就重用该实例( 会调用实例的 onNewIntent() ),否则就会创建新的实例并放入栈顶,即使栈中已经存在该Activity的实例,只要不在栈顶,都会创建新的实例。singleTask:如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的 onNewIntent() )。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移出栈。如果栈中不存在该实例,将会创建新的实例放入栈中。singleInstance:在一个新栈中创建该Activity的实例,并让多个应用共享该栈中的该Activity实例。一旦该模式的Activity实例已经存在于某个栈中,任何应用再激活该Activity时都会重用该栈中的实例( 会调用实例的 onNewIntent() )。其效果相当于多个应用共享一个应用,不管谁激活该 Activity 都会进入同一个应用中。位置在 AndroidManifest.xml 文件中 Activity 元素的 android:launchMode 属性。

    五、Activity四种启动模式有哪些?

    Activity的启动模式可以通过AndroidManifest.xml文件中的元素的属性来指定,一共有4中模式: 1 standard2 singleTop 3 singleTask 4 singleInstance 这4中模式又分两类,standard和signleTop属于一类, singleTask和signleInstance属于另一类。 standard和singleTop属性的 Activity 的实例可以属于任何任务(Task),并且可以位于Activity堆栈的任何位置。比较典型的一种情况是,一个任务的代码执行 startActivity(),如果传递的 Intent 对象没有包含 FLAG_ACTIVITY_NEW_TASK 属性, 指定的 Activity 将被该任务调用,从而装入该任务的Activity 堆栈中。 standard和singleTop的区别在于:standard模式的Activity在被调用时会创建一个新的实例,所有实例处理同一个 Intent对象; 但对于singleTop模式的Activity,如果被调用的任务已经有一个这样的Activity 在堆栈的顶端,那么不会有新的实例创建, 任务会使用当前顶端的Activity实例来处理Intent对象,换句话说,如果被调用的任务包含一个不在堆栈顶端的 singleTop Activity, 或者堆栈顶端为 singleTop 的Activity的任务不是当前被调用的任务,那么,仍然会有一个新的Activity对象被创建。 singleTask 和 singleInstance模式的Activity 仅可用于启动任务的情况, 这种模式的Activity总是处在Activity堆栈的最底端,并且一个任务中只能被实例化一次。两 者的区别在于:对于 singleInstance模式的Activity, 任务的Activity堆栈中如果有这样的Activity,那它将是堆栈中的唯一的 Activity, 当前任务收到的 Intent 都由它处理, 由它开启的其他 Activity 将在其他任务中被启动; 对于 SingleTask模式的Activity,它在堆栈底端,其上方可以有其他Activity被创建, 但是,如果发给该Activity的Intent对象到来时该Activity不在堆栈顶端,那么该Intent对象将被丢弃,但是界面还是会切换到当前 的Activity。 在多Activity开发中,有可能是自己应用间的activity 跳转,或者夹带其他应用的可复用activity。可能会希望跳转到原来某个activity实例,而非产生多个重复的activity。我们可借助 activity 四种启动模式来实现不同的需求:standard 默认模式 --------- 来了intent,每次都创建新的实例。 singleTop -------- 来了intent, 每次都创建新的实例,仅一个例外:当栈顶的activity 恰恰就是该 activity的实例(即需要创建的实例)时,不再创建新实例。这解决了栈顶复用问题,想一想,你按两次back键,退出的都是同一个activity,这感觉肯定不爽。 singleTask ---------- 来了intent后,检查栈中是否存在该activity的实例,如果存在就把intent发送给它,否则就创建一个新的该activity的实例,放入 一个新的task栈的栈底。肯定位于一个task的栈底,而且栈中只能有它一个该activity实例,但允许其他activity加入该栈。解决了在一 个task中共享一个activity。 singleInstance ----------- 肯定位于一个task的栈底, 并且是该栈唯一的activity。解决了多个task共享一个activity。

    六、Android中怎么切换task到前台

    如果你的平台是面向Android3.0(API level11),那么恭喜你,一个函数就可以搞定:moveTaskToFront (int,int)如果你和我一样苦逼的在用2.2的平台,那么就要稍微麻烦点了,基本上是用taskAffinity +FLAG_ACTIVITY_NEW_TASK +FLAG_ACTIVITY_SINGLE_TOP。先来看一下sdk怎么说的:1. taskAffinity:SDK说,如果用带FLAG_ACTIVITY_NEW_TASK标志来启动一个activity,并且这个activity与当前运行的另一个task(A)的affinity名字相同,那么就这个activity就会在那个task(A)里启动。Ok,到这还不行,人家没说会把Task_A带到前台,接着看另一个Flag2. FLAG_ACTIVITY_NEW_TASK好了,重点来了:如果Task_A中已经有了Activity_2,这时候如果以FLAG_ACTIVITY_NEW_TASK来startActivity_2,那么这个Task_A就会被带到前台。好了,现在Task_A已经可以到前台了,剩下最后一步:Activity_2不能创建两次,这就要求同时使用下面这个flag:3. FLAG_ACTIVITY_SINGLE_TOP如果Activity_2在Task的顶端,那么这个Activity_2就不会被再此创建,而是走onNewIntent.至此,结合上面3个特性,问题得以解决。结合代码,流程如下:1. 在androdiManifest.xml中添加Activity_2的taskAffinityname与Task_A相同(也就是与Activity_1的taskAffinity名字相同),如android:taskAffinity= "android.task.calendar"。2.在Task_B启动前,Activity_1先启动Activity_2并要求返回结果,startActivityForResult().3.Task_B中的Activity_4取得所需数据后,保存好(intent,或其他方法),然后startActivity(Activity_2),并带上(FLAG_ACTIVITY_NEW_TASK| FLAG_ACTIVITY_SINGLE_TOP)标志。4. Task_A被带到前台,并且调用到Activity_2::onNewIntent().5.Activity_2取得之前保存的信息(从Intent或其他地方),调用setResult(),然后finish().6. Activity_1中的onActivityResult()响应,得到返回结果。

    关于flag_activity_new_task的问题,通过《为什么有时候启动Activity需要加FLAG》、《在android中,设置一个activity在后台运行??》等文章的解答希望已经帮助到您了!如您想了解更多关于flag_activity_new_task的相关信息,请到本站进行查找!

    爱资源吧版权声明:以上文中内容来自网络,如有侵权请联系删除,谢谢。

    flag_activity_new_task
    win10输入法无法删除怎么解决 win10还原系统怎样做精简优化处理一般系统做精简优化处理都会做如下步骤: