android的activity任务栈

  activity的任务栈和启动模式,看了各种网站和书还是感觉不得其法。于是网上找到了adb的一条命令:

  

    adb shell dumpsys activity activities

   这条语句会列出手机中存在的任务栈。

  1、清空所有后台任务,运行了一个自己写的测试应用,发现任务栈的结构如下:

    

Stack #1:
    Task id #74
        affinity=包名
        Activities=[XXX]
    Task id #73
        affinity=包名
        Activities=[XXX]

Stack #0:
    Task id #1
        affinity=com.huawei.android.launcher
        Activities=[[ActivityRecord{3d2a088 u0 com.huawei.android.launcher/.unihome.UniHomeLauncher t1}]   Task id #3     affinity=com.android.systemui      Activities=[ActivityRecord{e8167f6 u0 com.android.systemui/.recents.RecentsActivity t3}]

  android中的所谓任务栈,其实有两层:任务栈包含Task,Task包含Activity。

然后修改Activity的启动模式进行测试(自己测试的,不知道是不是不同手机会有不同结果):  1、affinity就是我们使用android:taskAffinity设定的值。不同的Task是可以重复的,例如我们使用singleInstance启动模式时,activity单独占一个Task,Task的affinity可能和和相同进程中其他activitiy启动的Task一致,但是Task的id是不一致的。  2、launchMode为默认的时候,activity会运行在启动它的task中,不论两个activity是不是同一个应用。  3、launchMode为singleInstance时,不论是不是同一个应用,都会是一个单独的Task,且其中只有一个Activity,  4、launchMode为singleTask时,会依据affinity找到对应的Task,不存在则新建,存在则切换到该Task。然后看有没有该activity实例,有则清空上面的显示,没有则新建。

个人理解:  1、Stack只有两个,一个是系统的Launcher占用,一个是我们启动的应用占用的。点击Home键其实是这两个Stack交替。  2、每个Activity都有一个affinity,默认会是所在应用的包名。  3、启动一个Activity,首先有一个当前的Task,然后依据启动模式,选择是在当前Task添加,还是寻找新的Task。  4、 standard:新建实例。当前Task能添加则添加。如:当前Task中的Activity如果是singleInstance则会依据affinity寻找对应Task添加。    singleTop:和standard一样的步骤找到可添加的Task,然后看顶部的Activity是不是要启动的Activity。    singleTask:依据affinity找到可添加的Task,然后看Task中是不是有要启动的Activity实例。    singleInstance:依据affinity查找,是否存在只有要启动的activity的实例的Task,切换到该Task。

  主要是对任务栈的机构有了一个新的认识。

原文地址:https://www.cnblogs.com/z964166725/p/8729208.html

时间: 2024-08-06 12:42:00

android的activity任务栈的相关文章

使用adb shell dumpsys检测Android的Activity任务栈

谈起Android程序开发,就需要了解其四个主要的部件:Activity.Service.ContentProvider. BroadcastReceiver.而其中Activity是唯一直接控制程序界面呈现,直面用户操作的部件(当然BrowadCastReceiver也能通过桌面控件(App Widgets)来呈现有限的操作界面).Android对于Activity有严格的生命周期控制,以限制开发者在适当的回调函数里的放上合适的代码.对于多个Activity的转换,Android也有非常好的管

Android群英传笔记——第八章:Activity与Activity调用栈分析

Android群英传笔记--第八章:Activity与Activity调用栈分析 开篇,我们陈述一下Activity,Activity是整个应用用户交互的核心组件,了解Activity的工作模式,生命周期和管理方式,是了解Android的基础,本节主讲 Activity的生命周期与工作模式 Activity调用栈管理 一.Activity Activity作为四大组建出现平率最高的组件,我们在哪里都能看到他,就让我们一起先来了解一下他的生命周期 1.起源 Activity是用户交互的第一接口,他

Android总结 - Activity任务和返回栈、保存Activity的状态

任务和返回栈 一个应用程序当中通常都会包含很多个Activity,每个Activity都应该设计成为一个具有特定的功能,并且可以让用户进行操作的组件.另外,Activity之间还应该是可以相互启动的.比如,一个邮件应用中可能会包含一个用于展示邮件列表的Activity,而当用户点击了其中某一封邮件的时候,就会打开另外一个Activity来显示该封邮件的具体内容. 除此之外,一个Activity甚至还可以去启动其它应用程序当中的Activity.打个比方,如果你的应用希望去发送一封邮件,你就可以定

Android群英传知识点回顾——第八章:Activity与Activity调用栈分析

8.1 Activity 8.1.1 起源 8.1.2 Activity形态 8.1.3 生命周期 8.2 Activity任务栈简介 8.3 ActivityManifest启动模式 8.3.1 standard 8.3.2 singleTop 8.3.3 singleTask 8.3.4 singleInstance 8.4 Intent Flag启动模式 8.5 清空任务栈 8.6 Activity任务栈使用 四大组件中出现频率最高的组件 Activity是与用户交互的第一接口,它提供了一

Android开发---Activity的LaunchMode,深入理解android任务栈

1,Standard: 1.标准模式,每次启动都会创建新的Activity,不论是否已经在任务栈内存在.一个任务栈中可以有多种实例,每个实例可以属于不同的任务栈.在此模式下谁启动了此Activity,那么当前的Activity就存在于启动它的Activity的任务栈内.例如A的任务栈为a,现在A启动B(Standard模式).那么此时的任务栈a中存在两个Activity实例,下图说明栈与activity的关系: 2.下面我们模拟上图过程.我们创建2个Activity,MainActivity为A

Android中Activity启动模式详解,可以控制程序按home键后进来还会调用一个自己不喜欢的界面

其实这是很简单的一个问题.但是这还是要对android中activity的启动模式有相当的理解才行,当点击home键的时候,懂Android的人都知道,他会把当前activity放到后退栈中, 栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算.人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底.向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素:从一个栈删除元素又称为出栈或退栈,它是把栈

Android的Activity组件

本章主题是Activity组件:Activity是Android四大组价之一,其重要地位自然不用说."Activity是应用程序中可见的交互组件的基类,大致上等同于传统桌面应用个程序开发中的窗体."(引自---<Android 4 高级编程>) 每一个Activity都表示一个屏幕,应用程序会把它呈现给用户.应用程序越复杂,需要的屏幕可能就越多.典型情况下,这至少包括一个用来处理应用程序的主UI功能的主界面屏幕.这个主界面一把由许多Fragment组成,并且通常由一组次要A

玩转Android之Activity详细剖析

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 本文主讲了什么是Activity,它的生命周期,不对的操作,调用了什么函数.以及不同的Activity之间的跳转.数据传递等. Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能.它是 android 应用程序的基本功能单元.Activity 本身是没有界面的.所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到

android学习——activity总结

一.什么是activity Activity 是用户接口程序,原则上它会提供给用户一个交互式的接口功能.它是 android 应用程序的基本功能单元.Activity 本身是没有界面的.所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity(使用ActivityG