Android四大组件之activity的启动模式

前言

      为什么要引入任务栈的概念:
      windows下可以通过点击任务栏,切换任务
      Android 下点击下方小方块按钮,切换任务
     为了记录用户开启了那些activity,记录这些activity开启的先后顺序,google引入任务栈(task stack)概念,帮助维护系统的用户体验。

任务栈概念

        任务栈,故名思义就是来管理我们开启的任务(补充说明:任务:即就是一件事情;栈:先进后出;队列:先进先出);

在我们Android中,一个应用程序有多个界面(即Activity)组成,当我们启动多个界面的时候,就需要对我们所启动的这些界面进行管理,因而引入了任务栈来管理(任务栈作用就是管理内存中的Activity实例对象,维护我们在应用程序中打开的Activity,显示在我们眼前的这个界面,永远是位于栈顶的Activity,即最后开启的那一个界面);

     . 一个Android应用一但被开启,系统就给他分配一个任务栈,当所有的activity都退出的时候,任务栈就清空了;一个Android操作系统,存在多个任务栈,一个应用程序就是一个任务栈;默认情况下,关闭掉一个应用程序,清空了这个应用程序的任务栈,但这个应用程序的进程还会保留。

Activity的启动模式配置:

      在manifest.xml文件中的每个activity 节点下,配置  android:launchMode="singleInstance"

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.app">
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:launchMode="singleInstance">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>
</manifest>

Activity的启动模式之singleInstance(单例实例模式):

         开启目标activity , 系统为目标activity单独创建一个任务栈     ----   整个操作系统只有一个目标activity的实例对象 , 并且单独运行在一个任务栈中

        应用场景  :   如 :  来电拨号界面

单实例的创建步骤 :

               1. 私有化构造方法   ----   不允许外界进行创建

                2.  私有静态的instance对象

                3. 公开的静态的getInstance方法

                4.  为了线程的安全 , 需要给 getInstance方法加上锁 

public class MyThreadPoolManager {
        private MyThreadPoolManager() {
        }

        private static MyThreadPoolManager instance;

        public synchronized static MyThreadPoolManager getInstance() {
            if (instance == null) {
                instance = new MyThreadPoolManager();
            }
            return instance;
        }
    }

Activity的启动模式之standard(标准启动模式):

          打开一个应用程序 , 系统就为应用程序创建一个任务栈 .  开启目标activity , 把目标activity压入任务栈 , 使其位于任务栈的栈顶 . 点击返回时 , 从任务栈的栈顶移除一个activity

           应用场景 : 绝大多数情况都是这样的  如 打开一个文本文件时

Activity的启动模式之singleTop(单一顶部模式):

          开启一个目标activity , 系统去任务栈的栈顶查找有没有目标 activity的实例 , 如果有就复用activity , 如果没有就创建一个目标activity的实例对象 , 放在任务栈的栈顶

         应用场景 : 系统的浏览器标签 , 从通知栏打开播放器的时候

Activity的启动模式之singleTask(单一任务模式):

          开启一个目标activity , 系统去任务栈中查找有没有目标activity的实例对象 , 如果有 , 就清除目标activity上所有的实例对象 , 使其位于任务栈的栈顶 ,如果没有 , 就创建一个目标activity的实例 , 位于任务栈的栈顶

         应用场景: 浏览器书签。 避免栈顶的activity被重复的创建,解决用户体验问题,节约内存和cpu

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值