Android Application与thread、stack、task、activity之间的关

假设我们有两个Android Application他们分别是testA和testB。testA中只用一个activity名称为m,testB中含有三个activity分别是a、b和c。

(1) Application与thread:一对多。Application可以出现多个线程,但是在子线程里边不能去绘制UI,否则会出现异常。

(2) Application与stack:多对多。Application启动时创建一个stack_A。singleInstance对应的activity单独在一个stack_B中(有几个singleInstance类型的activity就会有几个stack与之对应)。

注意:“standard”和”singleTop”对应的activity和收到的 Intent的发送者在同一个stack内。

           “singleTask”对应的activity永远都会在stack_A中(并且不像有的人说的那样它在stack的最底层),

           “singleInstance”对应的activity单独在stack_B中,有且只有它自己。

证明:(1)start testB ——>  ——> b(加载类型singleInstance) ——> ——> back键 ——> 我们看到了a

             根据stack的特性先进后出,如果a、b、c在同一个sack中我们按back键之后应当看到的是b,但是事实是我们看到了 a,此现象可以证明a和c处于同一个stack而b单独在另一个stack中,所以一个Application可以对应多个stack。

           (2)start testB ——>      

                    start testA ——> ——> ——> back键 ——> m

                    根据stack的特性先进后出可以得出,m和c在同一个stack中,而c是testB中的activity,所以一个stack可以对应多个Application。

(3) Application与task:多对多。因为一个task对应一个stack。

(4) Application与activity:一对多,这个没得说。

补充:singleInstance类型的activity具有LocalService的一些特性,例如:如果我们不把singleInstance类型的activity销毁,启动此activity的应用即便退出,此activity仍然处于onStop状态。销毁activity的方法有3中:一种是去调用onDestroy,一种是按back键让其退出stack,还有一种就是系统去销毁。所以有一种情况我们就可以做出合理的解释了:一个android应用没有任何service但是当退出主页面后,从后台仍然能看到此进程在运行,这就有可能是我们使用了singleInstance类型的activity而没有去销毁它导致的。

         singleTask对应的activity永远都会在自已应用程序的默认stack中,不管谁去调用它。例如:start testB ——> a,然后start testA ——> ——> b(加载类型singleTask)——>back键——>a;注意如果:start testB ——> a——>b(加载类型singleTask)——>c,然后start testA ——> ——> b(此时c被销毁)——>back键(b被销毁)——>a,


学习Android,了解一些基本概念将有助更深入的去学习和理解Android。在这里,所要讲诉的是Android里三个比较基础的概念:Android  Application、Activity Stack 和 Task。

  1. 什么是Android Application?

  Android Application就是一个android应用程序。 简单的理解就是一个apk就是一个Android Application。例如Android平台下自带的应用程序:Browser、Contacts、camera等。

  每一个Application都是由Activity、Service、content Provider和Broadcast Receiver等Android的基本组件所组成,其中Activity是实现应用程序的主体,它承担了大量的显示和交互工作,甚至可以理解为一个界面 就是一个Activity。

  2. 什么是Activity Stack?

  如上所诉,Activity承担了大量的显示和交互工作,从某种角度上将,我们看见的应用程序就是许多个Activity的组合。为了让这许多 Activity协同工作而不至于产生混乱,Android平台设计了一种堆栈机制用于管理Activity,其遵循先进后出的原则,系统总是显示位于栈 顶的Activity,从逻辑上将,位于栈顶的Activity也就是最后打开的Activity,这也是符合逻辑的。

  在操作应用程序时,每次启动新的Activity,都会将此压入Activity Stack,当用户执行返回操作时,移除Activity Stack顶上的Activity,这样就实现了返回上一个Activty的功能。直到用户一直返回到Home Screen,这时候可以理解为移除了Activity Stack所有的Activity,这个Activity Stack不再存在,应用程序也结束了运行。

  3. 什么是Task?

  Task是指将相关的Activity组合到一起,以Activity Stack的方式进行管理。从用户体验上讲,一个“应用程序”就是一个Task,但是从根本上讲,一个Task是可以有一个或多个Android Application组成的。例如:你想在发送短信时,拍一张照并作为彩信发出去,这时你首先停留在短信应用程序的的Acitivity上,然后跳转到 Camera应用程序的Activity上,当完成拍照功能后,再返回到短信应用程序的Activity。这实际上是两个Android Application协同合作后完成的工作,但为了更好的用户体验,Android平台加入了Task这么一种机制,让用户没有感觉到应用的中断,让用 户感觉在一“应用程序”里就完成了想完成的工作。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值