Android中 Activity 四种加载方式的理解

 

一直看到很多面试题中都有怎么加载Activity的问点,关于Activtiy的得后两种一直也是理解的不是很清楚,多写点总结下

 

Activity 中的加载模式是在laucher 中用android:launchMode属性来指定。

      主要有以下四种加载模式:

      1.standard :标准式,这个也是Activity 不定义时的加载模式。

      2.SingleTop :Task 顶单例加载模式。

      3.SingleTask :Task 内单例加载模式。

      4.SingleInstance:全局单例加载模式。

 

以下来详细看看四种Activity的加载模式:

     1. standard :标准式

                   这种Activity加载方式,每次启动目标Activity时,android 总会创建一个新的实例添加到当前Task 栈中。在一个按钮的事件中写如下:

              Intent intent =new Intent (A.this,A.class);

             StartAcitvity (intent); 发现没有都启动新的A的实例,单不同的A实例之间的hashcode不同,Task 栈的ID相同。

 

     2. SingleTop :Task 顶单例加载模式。

            这种Activity加载方式有分两种情况:

           @1.启动的目标的Activity已经位于Task栈顶时,系统不会重新创建目标Activity实例,而是复用已有的Activity实 例 。   

        @2. 启动的目标的Activity  没有位于Task栈顶时,系统会重新创建目标Activity的实例,并将其加载到Task的栈顶----此时与standard 加载模式一样。

 

       3. SingleTask :Task 内单例加载模式。这种加载模式的Activity 在同一个Task 内只有一个实例。

         这种Activity加载方式有分三中种情况:

      @1.如果启动的目标的Activity  不存在时,系统会重新创建目标Activity的实例,并将其加载到Task的栈顶。

      @2.如果启动的目标的Activity 已经位于Task栈顶时,此时与SingleTop的加载方式相同。

      @3.如果启动的目标的Activity A 已经存在,但没有位于Task栈顶时,此时系统会把位于该A Activity之上的所有Activity移出Task栈,从而使得目前Acitivity A 位于栈顶。

        讲解@3. 如:A启动B ,栈中时从栈底往上 A--->B, B再启动A ,栈中时从栈底往上,A--->B-->A,如果启动B的加载模式SingleTask 类型,A再启动B时,栈中时从栈底往上,A--->B-->A-->B ,由于B是SingleTask 启动类型,所以会移出红色部分A--->B-->A-->B,使得B位于栈顶。

 

    4.SingleInstance:全局单例加载模式。

      这种Activity加载方式有两种情况:

      这种Activity加载方式保证了无论从那个Task栈中启动目标Activity ,只会创建一个目标Activity实例并且用一个全新的栈来装载该Activity 实例。

     @1.如果启动的目标的Activity  不存在时,系统会先创建一个全新的Task,再创建目标Activity的实例,并将其加载到新的Task的栈顶。

    @2.如果启动的目标的Activity 已经存在,无论位于那个应用程序,无论在那个栈中,系统会将该栈转到前台,从而使该Acitvity 显示出来。

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值