`
dengzhangtao
  • 浏览: 679156 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

android之Activity的Tasks and Back Stack

 
阅读更多
Activity任务和返回栈:
什么时候在同一个task呢,不是说一个application里的activity才能在同一个task里,
developer.android.com里说:
Even though the activities may be from different applications, Android maintains this seamless user experience by keeping both activities in the same task.
意思是:
不同的应用里的activity可以在同一task。比如,在你的app里要调用发送email的功能,你回send一个intend去调用email的activity,这时这个email的activity便在你的之前的activity的task内,返回就回到你的activity啦。

另外一个情况,在同一个application里,也可以制定一个activity单独使用新的栈stack,
(默认activity都在被创建的activity里的task里),
在你想返回这个activity后,不想回到被创建的activity的时候,你可以指定使用单独的task。
比如一键清理的快捷方式。

如何指定,目前我知道两种:
都需要<action android:name="android.intent.action.MAIN" />表示开始一个task
1,使用activity的launchmode属性-singleInstance
2,使用activity的launchmode属性-android:taskAffinity,eg:
  android:taskAffinity="com.hiapk.kbatterydoctor.shortonkey"

Activity启动模式设置:

        <activity android:name=".MainActivity" android:launchMode="standard" />

Activity的四种启动模式:

    1. standard

        模式启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。

    2. singleTop

        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

    3. singleTask

        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。

    4. singleInstance

        在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

0
3
分享到:
评论

相关推荐

    Android学习笔记-Activity篇

    六、Tasks and Back Stack: 1. 管理Task:Task是Android中的一系列Activity堆栈,代表用户的操作序列。每个Task有自己的Back Stack,用于存储按启动顺序排列的Activity。 2. 定义launch模式:在AndroidManifest.xml...

    获取栈顶的activity

    对于大多数常规应用需求,如导航和回退,Android框架已经提供了标准的处理方式,如使用Intent和back stack。只有在特定场景下,如全局监听或调试,才需要考虑直接获取栈顶Activity。 总的来说,理解和掌握如何获取...

    Android任务管理器源码.zip

    后退栈(Back Stack)是Activity按回退顺序存储的地方,当用户按下Back键时,栈顶的Activity会被销毁并返回到前一个Activity。 6. **FLAG_ACTIVITY_* 系列标记** - 开发者在启动Activity时可以使用不同的FLAG,...

    Android中文开发指南

    - **回退栈(Back Stack)**:Activity的回退栈遵循“后进先出”原则,当用户按下返回键时,最近的Activity会被弹出栈,直至关闭整个任务。 9. **启动任务 (Starting a Task)** - **启动新任务**:通过Intent设置...

    获取系统topActivity demo

    Android应用是基于任务(Task)和栈(Back Stack)的概念运行的,Activity会被压入栈中,当用户切换到其他Activity时,新Activity会被压入栈顶,而原来的Activity则被压在下面。因此,栈顶的Activity就是当前用户...

    Android编程中activity的完整生命周期实例详解

    Activity的生命周期与Android的返回栈(back-stack)紧密相关。返回栈是一种后进先出(LIFO)的数据结构,每个Activity作为栈中的一个元素。当新Activity启动时,它被压入栈顶,而当前Activity则调用`onStop()`。...

    Android开发指南全中文版

    - **清理堆栈(Clearing the Back Stack):** 清除任务栈中的Activity实例。 - **启动任务(Launching a Task):** 控制如何启动新的任务。 **进程和线程(Processes and Threads)** - **进程(Process):** Android应用...

    Android开发指南中文版.doc

    - **清理堆栈(Clearing the Back Stack)** - 控制Activity在返回时的状态,例如是否清除之前的状态。 - **启动任务(Launching Tasks)** - 决定了Activity启动时的行为,例如是否创建新的任务栈。 #### 三、进程...

    退出地图应用.zip

    Android使用任务栈(Task Stack)来管理Activity,新的Activity会被压入栈顶,而`finish()`方法会将当前Activity从栈中弹出。要退出应用,可以使用`Intent.FLAG_ACTIVITY_CLEAR_TOP`标志启动主Activity,这将清除...

    android开发学习

    - **清理堆栈 (Clearing the Back Stack)**: 可以通过 Intent 的标志来控制是否清理 Activity 堆栈。 - **启动任务 (Starting a Task)**: 可以通过 Intent 启动新的任务栈。 #### 五、进程和线程 (Processes and ...

    ciclo-vida-activity-android:理解活动生命周期的例子

    9. **任务和栈(Tasks and Back Stack)** 活动可以组织在任务(Task)中,每个任务都有一系列的回退栈。默认情况下,新启动的活动会被添加到当前任务的栈顶,但可以使用Intent标志(如FLAG_ACTIVITY_NEW_TASK)来...

    进阶篇设计高效的应用导航

    系统会自动管理一个返回堆栈(Tasks and Back Stack)或历史屏幕列表,记录用户访问过的屏幕顺序。然而,在特定情况下,开发者可能需要重写返回键的默认行为,以适应应用的特定需求。例如,在应用中嵌入了网页浏览器...

    a project model for the FreeBSD Project.7z

    After providing definitions of terms used, this document will outline the organisational structure (including role descriptions and communication lines), discuss the methodology model and after ...

Global site tag (gtag.js) - Google Analytics