iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android 启动模式详细介绍
  • 717
分享到

Android 启动模式详细介绍

启动Android 2022-06-06 05:06:47 717人浏览 八月长安
摘要

Android 启动模式:     启动模式:LaunchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成

Android 启动模式:

    启动模式:LaunchMode在多个Activity跳转的过程中扮演着重要的角色,它可以决定是否生成新的Activity实例,是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。 

     这里简单介绍一下任务栈task的概念,task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就创建一个与之对应的task。任务栈里面的Activity是按照先进后出的形式保存的,比如:你打开一个页面,在页面中打开另一个页面,另一个页面退出后,返回的是第一个打开的页面,这就是任务栈的简单原来。 

     但是在实际程序中多次页面跳转后,不想再回到上次打开的页面,这时候页面显示的启动模式就很有必要了。

Activity一共有以下四种launchMode启动模式:

1.standard
2.singleTop
3.singleTask
4.singleInstance

我们可以在AndroidManifest.xml配置的android:launchMode属性为以上四种之一即可。如图所示:
launchMode 

下面分别介绍这四种启动模式。 

     这里要先理解栈顶的概念:只要是页面刚打开,不管他是什么模式的,它都是栈顶页面。
     栈底的概念虽然书上没说,但是要理解透彻栈的模式,还是要知道有这个说法,比如:首先打开的页面是位于最底下的,然后后面打开的页面一次往上堆。只有最底下的页面关闭,程序才算完成关闭。

一.四种启动模式的概念和理解

(一)standard标准模式

     是默认的启动模式,不用为配置android:launchMode属性即可,当然也可以指定值为standard。
     每次启动standard模式的Activity时,都创建Activity实例,并放入任务栈;
     简单的理解:如果几个页面都是standard模式启动的,那么页面无论是跳转到别的页面还是自己跳转到自己页面,跳转多少次后,就要点击多少次退出键最后才能关闭所有的。

(二)SingleTop栈顶单例模式

     指定属性android:launchMode=”singleTop”,系统就会按照singleTop启动模式处理跳转行为。这个在实际中并不常用。
     如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,只需复用自己已有的Activity示例即可。但是如果自己不是栈顶的话,还是会创建自己的示例的。
     简单的理解:如果页面的启动类型是SingleTop类型的,它点击跳转到自己的页面,只需要点击一次退出就退出程序了。因为当它处于栈顶时,它无论点击多少次跳转到自己,都自有一个Activity实例,点击一次退出就会退出程序。和Standard模式对比的话,Standard模式下点击多少次自己就要退出多少次后才能退出程序。

(三)SingleTask内单例模式

     指定属性android:launchMode=”singleleTask”,这是应用中比较常用到的模式。也是我们要重点理解的模式。
     如果要启动的那个SingleTask模式的Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都移出栈里面;如果不存在该模式的Activity就创建给模式的Activity放在该栈顶。也就是说:一个栈里面只能有一个SingleTask模式的Activity。
     上面几句重点理解一下:
     如果SingleTask模式的Activity已经存在栈顶,那么再次跳转到自己页面,它是不会创建自己的Activity实例对象的,这个和SingleTop是一样的。
     但是如果SingleTask模式的Activity已经不在栈顶,那么再次跳转到自己页面,它是不会创建自己的Activity实例对象的,也会直接跳转到自己的实例Activity,并且把压在该模式之上的所有Activity实例都移除栈,但是该模式底下的Activity实例它是没有办法移除的。
     如果SingleTask模式的Activity都还没有创建,那么它会新建它的Activity实例对象,并把自己放在栈顶,这个和所有的Activity实例对象都是一样的。
     关于SingleTask的应用是特别值得注意的,比如主页面的设计一般使用SingleTask模式来设计,因为用户点击多次页面的相互跳转后,在点击回到主页,再次点击退出,这时他的实际需求就是要退出程序,而不是一次一次关闭刚才跳转过的页面,最后才退出。这就需要用到SingleTask模式。

(四)SingleInstance全局单例模式

     指定属性android:launchMode=”singleleInstance”。
该模式下,无论是从哪一个任务栈Task中启动Activity,只会创建一个目标的Activity实例,并且使用一个全新的Task栈来加载该Activity实例。
     可以看出SingleInstance模式比SingleTask模式更加霸道,打开一个SingleTask模式的Activity,它如果已经存在它会把在它之上的该Task里面的Activity实例移除;而打开SingleInstance模式的Activity,不管它存不存在,他都会新建一个Task,把自己放在里面,也就就是说刚打开的SingleInstance的Activity在自己新建的栈里面只有自己一个实例对象。
     但是它和新建自己的Task时,是不会移除自己之前Activity实例上面或下面的Activity实例,之前的Task里面的Activity依然存在。
如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;
     SingleInstance模式一般是用于资源的共享。比如有软件A打开的QQ和用软件B打开的QQ是打开的是同一个QQ软件。并且退出QQ程序后,原来打开的程序并没有被关闭。
     这就是SingleInstance模式作用。

二.编程程序加强理解

     本程序只是简单页面的跳转,用来验证上面的模式的正确性和加强对模式过程的理解。

本程序设计一份之后简单复制就可以完成。

设计后的结果:四个Activity和四个布局文件,如图所示:
文件创建

(一)布局文件activity.xml的设计


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="Http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:gravity="center"
  android:orientation="vertical">
  <TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="standard模式" />
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="ToMainActivity"
    android:text="去主页面"
    android:textAllCaps="false"
    />
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="ToSingleTopActivity"
    android:text="SingleTop模式页面"
    android:textAllCaps="false"/>
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="ToSingleTaskActivity"
    android:text="ToSingleTask模式页面"
    android:textAllCaps="false"/>
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="ToSingleInstanceActivity"
    android:text="ToSingleInstance模式页面"
    android:textAllCaps="false"
    />
  <Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:onClick="ToFinish"
    android:text="关闭页面"
    android:textAllCaps="false"/>
</LinearLayout>

其中上面的TextView控件的内容要改为该页面设计的模式名。

(二)MainActivity.java文件代码的设计


package com.example.android;
import android.content.Intent;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.view.View;
public class MainActivity extends Activity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
  }
  //跳转到MainActivity页面
  public void ToMainActivity(View v) {
    startActivity(new Intent(this, MainActivity.class));
  }
  //跳转到SingleTopActivity页面
  public void ToSingleTopActivity(View v) {
    startActivity(new Intent(this, SingleTopActivity.class));
  }
  //跳转到SingleTaskActivity页面
  public void ToSingleTaskActivity(View v) {
    startActivity(new Intent(this, SingleTaskActivity.class));
  }
  //跳转到SingleInstanceActivity页面
  public void ToSingleInstanceActivity(View v) {
    startActivity(new Intent(this, SingleInstanceActivity.class));
  }
  //关闭页面页面
  public void ToFinish(View v) {
    finish();
  }
  }

四个Activity文件的文件名换一下就可以了。

(三)程序运行前要设置AndroidManifest.xml,如下:


<activity android:name=".MainActivity">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <cateGory android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>
<activity
  android:name=".SingleTopActivity"
  android:launchMode="singleTop" />
<activity
  android:name=".SingleTaskActivity"
  android:launchMode="singleTask"/>
<activity
  android:name=".SingleInstanceActivity"
  android:launchMode="singleInstance" />

前面一个activity是系统默认添加的,后面三个activity是要自己手动添加的

(四)程序运行后的结果:

cuxu
程序启动后点击各个模式试一下,最后每次点击关闭页面,看看退出的顺序是否是你所想的?要弄清过程就可以。 

     一些简单的逻辑顺序,比如: 

     1.比如多次点击主页面按钮,要多次点击关闭页面按钮才能退出程序。
     2.点击ToSingleTask模式的页面后,无论你点击多少次,去主页面的按钮或ToSingTop按钮,再点击一次ToSingleTask按钮后,点击关闭页面按钮后,退回的是standard模式页面,再次点击关闭页面按钮后将退出程序。
     3.后面也可以改变程序的最开始启动的页面的启动模式,再看看运行的效果。

(五)对比一下这四种模式

       Android的四种启动模式是Standard、SingleTop、SingleTask、SingleInstance,这是我们要必须要记住的几个关键字。这几种模式有什么区别? 我简单描述一下: 

       1.从四种模式的命名都可以看出,后面三种模式都带有single关键字,是单例的意思,所以后面三个模式都是单例的模式。而前面一个模式是加载模式,即点击多少次该页面,该页面就会加载多少个Activity对象。 

       2.后面三种单例模式再对比一下,可以发现它们的单例强度一个比一个强:
       (1)SingleTop单例模式,只能保证它在栈顶的情况下,它才是单例模式;比如,当前页面是SingleTop模式的页面,如果点击跳转到自身页面,在栈里面是不会创建再它的Activity对象的;如果singleTop模式的页面还没有创建或给模式的页面不在栈顶,这种情况下跳转到该模式的那个页面,会重新创建它的Activity对象。 

       对比Standard模式和SingleTop模式发现,在同一个栈里面,可以有多个standard模式的同一个页面的对象,也可以有多个SingleTop模式的同一个页面的对象,但是SingleTop模式的同一个页面不可以连续两次存在,这里注意是连续的两次。而Standard模式的同一个页面可以连续多次的出现,这是它们的区别。 

       (2)SingleTask单例模式,能保证它在整个栈里面只有它一个Activity对象,如果同一个SingleTask模式的页面之前打开过,然后点击其他页面之后,再次点击上面的SingleTask模式的那个页面,那么第一次打开这个页面的后面的所有Activity对象都会被清除掉,但是该模式页面打开之前打开的页面的Activity对象没有被清除。
       对比SingleTop和SingleTask这两种单例模式,在整个栈的的数量是其中的一个区别,SingleTask模式的同一个页面在一个Task里面只能有一个Activity对象。 

       (3)SingleInstance单例模式,上面的SIngleTask模式已经很强了,难道还有比他更强的吗。答案肯定是有的。SingleInstance单例模式能保证在整个Task中只能有它自己一个Activity对象,这里要注意是整个Task中,无论是栈顶栈底都是它自己。实现的方法是,它会新建一个自己的Task栈来保存自己的Activity示例,当再次点击它时它也是不会创建自己的示例,不管它是不是在栈顶,它在整个程序中只会保存一个实例对象。因为它是自己单独一个Task栈保存的,所以它是不会清除它的Activity实例对象的;比如;在SingleInstance模式的页面上打开其他模式的页面,它的Activity对象是保存在一个原来的Task栈里面的,即打开SingleInstance页面之前的Task栈里面;如果SingleInstance模式的页面的最开始打开的,那么其他的模式的Activity对象也是放在一个新建的Task栈里面。 

       对比SIngleTask和SingleInstance,这两种单例模式,SingleTask模式的Activity对象会移除在它的Activity对象之上的Activity对象,而SingleInstance模式,会在另一个Task栈里面保存自己的对象。 

       这四种模式中,只用SingleInstance模式的页面会创建新的Task栈(同一个页面只创建一次),其他的模式都是在原来的栈里面创建Activity对象

三.Android启动模式相关的知识

(一)退出单个Activity方法:1.调用finish2.杀死该进程:killprocess(Process.mId)3.终止正在运行的虚拟机:system.exit()(二)退出整个应用:1.制造抛异常导致整个程序退出2.将所有的activity放入到一个list中,然后在需要退出的时候,将所有的activity,finish掉3.通过广播来完成退出功能

     通过广播来完成退出功能,具体实现过程是这样的:在每个Activity创建时(onCreate时)给Activity注册一个广播接收器,当退出时发送该广播即可。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:Android中activity的启动模式Android LaunchMode四种启动模式详细介绍Android编程中Activity的四种启动模式Android Activity启动模式之singleTask实例详解Android Activity启动模式之singleTop实例详解Android入门之Activity四种启动模式(standard、singleTop、singleTask、singleInstance)Android 两种启动模式的实例详解


--结束END--

本文标题: Android 启动模式详细介绍

本文链接: https://www.lsjlt.com/news/23080.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Activity 四种启动模式详细介绍
    Activity 四种启动模式详细介绍在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。Andr...
    99+
    2023-05-31
    activity 启动模式 ct
  • macOS启动模式汇总介绍
    想要进入特定的启动模式,要使用下面的任何组合键进入任何特定模式,首先需要使用电源按钮打开Mac,然后立即按所需的组合键,本次小编为您带来macOS启动模式汇总介绍,快来看看吧!macOS启动模式汇总介绍恢复模式通过恢复模式,可以访问终端,使...
    99+
    2023-06-05
  • java工厂模式的详细介绍
    本篇内容介绍了“java工厂模式的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java设计模式-工厂模式什么是工厂模式?工厂模式(...
    99+
    2023-06-20
  • Win10新功能Continuum模式详细介绍
      很多用户在使用Win10技术预览版,听说有个Continuum模式,大家都觉得很陌生,毕竟Win10带来的新东西实在多,比如微软小娜等。   Win10 Continuum模式是Win10的一项新的功能,专门为混合形...
    99+
    2023-06-11
    Win10 Continuum 模式 新功能
  • C++设计模式中的工厂模式详细介绍
    目录1. 简单工厂模式2. 工厂方法模式3. 抽象工厂模式1. 简单工厂模式 简单工厂模式(Simple Factory Pattern): 是指定义一个工厂类,工厂类中实现一个方法...
    99+
    2024-04-02
  • Vue Router路由hash模式与history模式详细介绍
    目录一、前言二、hash模式三、history模式一、前言 对于hash模式和history模式,最直接的区别就是地址栏带不带"#"号了。 vue脚手架搭建的项目...
    99+
    2024-04-02
  • PHP中的工厂模式的详细介绍
    本篇内容主要讲解“PHP中的工厂模式的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP中的工厂模式的详细介绍”吧!工厂模式是一种类,它具有为您创建对象的某些方法。您可以使用工厂类创建...
    99+
    2023-06-17
  • Java详细介绍单例模式的应用
    目录一、什么是单例模式二、实现单例模式的几种方法1. 懒汉模式(线程不安全)2. 懒汉模式(线程安全)3. 饿汉模式一、什么是单例模式 单例模式(Singleton Pattern)...
    99+
    2024-04-02
  • C++超详细介绍模板
    目录定义例子格式处理方法定义 函数模板不是一个实在的函数,编译器不能为其生成可执行代码。定义函数模板后只是一个对函数功能框架的描述,当它具体执行时,将根据传递的实际参数决定其功能。 ...
    99+
    2024-04-02
  • 多线程中Future模式的详细介绍
    本篇内容介绍了“多线程中Future模式的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在高性能编...
    99+
    2024-04-02
  • Java的24种设计模式详细介绍
    这篇文章主要介绍“Java的24种设计模式详细介绍”,在日常操作中,相信很多人在Java的24种设计模式详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的24种设计模式详细介绍”的疑惑有所帮助!...
    99+
    2023-06-16
  • C++模板超详细介绍
    目录1.前言2.函数模板3.类模板1.前言 模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。 模板是创建泛型类或函数的蓝图或公式。 通常有两种形式:函数模板和...
    99+
    2024-04-02
  • Vue路由模式中的hash和history模式详细介绍
    目录1. 路由概念2. hash模式3. history路由模式1. 路由概念 路由的本质就是一种对应关系,根据不同的URL请求,返回对应不同的资源。那么url地址和真实的资源之间就...
    99+
    2024-04-02
  • CSS3动画的详细介绍
    这篇文章主要介绍“CSS3动画的详细介绍”,在日常操作中,相信很多人在CSS3动画的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”CSS3动画的详细介绍”的疑惑有所帮...
    99+
    2024-04-02
  • Android 启动模式FLAG_ACTIVITY_CLEAR_TOP案例详解
    四种启动模式 standard: 只要被启动就会创建一个新的 singleTop: 栈顶复用(当被启动的Activity处于Task栈顶时,可以复用,直接调用o...
    99+
    2024-04-02
  • MySQL主从复制之GTID模式详细介绍
    目录一、GTID概述二、GTID相较与传统复制的优势三、GTID自身存在哪些限制四、GTID工作原理简单介绍五、如何开启GTID复制六、查看GTID相关参数七、GTID与传统模式建立...
    99+
    2024-04-02
  • SpringBootPom文件依赖及Starter启动器详细介绍
    目录Pom文件的依赖spring-boot场景启动器Pom文件的依赖 我们进入POM文件,首先是看到的是Pom文件中的parent parent是Spring Boot的框架版本控制...
    99+
    2024-04-02
  • 硬盘启动bios设置方法的详细介绍
    电脑在启动的时候,会从硬盘中寻找引导文件从而启动系统,如果果硬盘不是第一启动项,或者有两个硬盘的话就会导致系统无法启动,那么就需要进入bios设置硬盘启动顺序,该如何操作呢,下面我们来看看硬盘启动bios设置方法教程。1、首先,开机,开机画...
    99+
    2023-07-10
  • CSS盒模型的详细介绍
    本篇内容主要讲解“CSS盒模型的详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CSS盒模型的详细介绍”吧!为了给文档树中的各个元素排版定位(布局),浏览...
    99+
    2024-04-02
  • Android中的装饰模式介绍
    这篇文章主要讲解了“Android中的装饰模式介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Android中的装饰模式介绍”吧!前言装饰模式(Decorator Pattern):也可以...
    99+
    2023-06-04
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作