`
程言方
  • 浏览: 47975 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

activity 的四种启动模式与single task的内存回收

 
阅读更多
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进出栈.zip.zip

    如FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP等,可以改变Activity的启动行为,例如清除栈中所有Activity或者确保栈顶始终是特定的Activity。 通过分析和实践"安卓开发-模拟Activity进出栈.zip"中的内容...

    Android的activity学习笔记

    四种基本启动模式包括:标准模式(SingleTop)、单实例模式(SingleInstance)、单任务模式(SingleTask)和栈顶复用模式(SingleActivity)。不同模式决定着新启动的Activity如何插入到任务(Task)栈中,以及何时...

    android 面试总结.doc

    启动Activity的Intent有两种模式: - standard模式:每次启动Activity都会创建新的实例,即使栈中已有该Activity。 - singleTop模式:如果Activity在栈顶,不会创建新实例,否则会创建新实例(除非设置taskAffinity...

    Android常见面试题目汇总以及答案

    当一个已存在的Activity收到新的Intent启动请求时,而不是创建新实例,onNewIntent()会被调用,例如在单实例模式下或通过FLAG_ACTIVITY_SINGLE_TOP标记启动。 10. **显式启动和隐式启动**: 显式启动是通过指定...

    Android--开发--任务管理器源码.rar

    每个Activity可以关联到一个任务,可以通过设置Intent的FLAG_ACTIVITY_NEW_TASK标志来创建新的任务,或者通过FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP等标志来影响任务中的Activity行为。 三、任务管理...

    android开发中文指南

    Android支持多种Activity启动模式,如标准模式、单实例模式、单任务模式和单栈顶模式。这些模式影响Activity在任务堆栈中的行为和生命周期。 **清理堆栈** 当一个任务的最后一个Activity被关闭时,整个任务会被...

    Android开发指南中文版

    当组件不再需要时,可以通过Intent的FLAG_ACTIVITY_CLEAR_TASK和FLAG_ACTIVITY_NEW_TASK标志来关闭组件,或者系统会根据内存需求自动回收组件。 6. **Manifest文件** AndroidManifest.xml是应用程序的配置文件,...

    退出多个activitydemo

    Android使用任务(Task)和回退栈(Back Stack)来管理Activity。默认情况下,新启动的Activity会被压入栈顶,而Back键会弹出栈顶的Activity。为了退出所有Activity,我们需要理解这个栈的概念,并可能需要在某些...

    Android退出整个应用的方法

    3. **使用`FLAG_ACTIVITY_CLEAR_TOP`或`FLAG_ACTIVITY_SINGLE_TOP`**:当新启动一个Activity时,可以设置这些标志,它们会让栈顶的Activity重新创建(如果不存在则创建新实例),并将栈中所有在它之上的Activity移除...

    android面试题

    - **Single Task**:如果Activity实例已存在于任务栈中,则将该实例移至栈顶并重用。 - **Single Instance**:在单独的任务栈中启动Activity,并确保其为唯一实例。 #### 9. Activity的生命周期方法 - **onCreate...

    Android应用源码完全退出程序的方法.zip

    Android应用由一系列Activity组成,它们存在于一个任务(Task)中,任务按照后进先出(LIFO)的原则管理。当用户按下设备的返回键时,系统会销毁最近的Activity,直到任务栈为空,此时任务被认为已结束。 2. **源码中...

    App-Exit-Demo:app退出Demo

    7. **使用FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_SINGLE_TOP** 这两个Intent标志可以在启动新Activity时处理栈中的Activity,实现特定的退出效果。例如,`FLAG_ACTIVITY_CLEAR_TOP`会清除栈中所有位于目标...

Global site tag (gtag.js) - Google Analytics