在AndroidManifest.xml中 ,有一个默认的activity 在它里面可以设置activity启动模式, android:launchMode=" " ,该属性用于配置Activity的加载模式,该属性支持4中属性 每不同的模式出现不同的效果,下面详解启动模式。

standard:标准模式,默认加载模式

singleTop:Task顶单例模式

singleTask:Task内单例模式

singleInstance:全局单单例模式

standard 和singleTop的区别在于

button.setOnClickListener(new OnClickListener() { 
            @Override 
            public void onClick(View v) { 
                Intent intent = new Intent(); 
                intent.setClass(MainActivity.this, MainActivity.class); 
                startActivity(intent); 
            } 
        });

如果点击此button singleTop模式只会产生一个实例,因为android:launchMode="singleTop"  的时候activity处于栈顶。standard会产生多个实例(要看button点击的次数)。

如果更改为MainActivity.this, SecondActivity.class则会产生两个实例,

singleTask

singleTask模式 使用本模式可以很好的解决重复创建栈顶活动的问题,当活动的启动模式指定为singleTask,每次启动该
活动时系统首先会在Task栈中检查是否存在该活动的实例,如果发现已经存在则直接使用该实例,并把这个活动之上的活动统统出栈

在MainActivity中加入 singleTask模式

在SecondActivity中启动MainActivity时会发现栈中已经存在一个MainActivity实例了,并且在SecondActivity的下面,
于是SecondActivity会从返回栈中出栈,而MainActivity重新成了栈顶活动,因此MainActivity的onRestart()方法和
SecondActivity的onDestroy()方法得以执行。这时你只用点击一次返回按钮就能退出程序了。当你把singleTask去掉的时候,就会发现此时需要按三下才能退出程序,
是因为secondActivity跳转到MainActivity的时候有新产生了一个MainActivity实例,此时并没有调用onStart()方法和destroy()方法。

singleInstance

android:launchMode="singleInstance"这个模式不同于以上三种模式,指定为singleInstance模式的活动会启用一个新的返回栈来管理这个活动
这个栈是可以共享的, 在本模式下会产生一个单独的返回栈来管理这个共享的活动,无论哪个应用程序来访问这个活动,都共用同一个返回栈,也就解决了共享活动实例的问题

package com.example.pc.androidtoptest;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;import com.example.androidtoptest.R;public class MainActivity extends Activity {private Button btnButton;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // 生命周期方法
// Log.d("MainActivity", this.toString());Log.d("MainActivity", "Task id is" + getTaskId());super.setContentView(R.layout.activity_main); // 设置要使用的布局管理器btnButton = (Button) findViewById(R.id.btn);btnButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {Intent intent = new Intent(MainActivity.this, SecondActivity.class);startActivity(intent);}});}@Overrideprotected void onRestart() {super.onRestart();Log.d("MainActivity", "onRestart");}}
package com.example.pc.androidtoptest;/*** Created by pc on 2016/4/18.*/import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;import com.example.androidtoptest.R;public class SecondActivity extends Activity {private Button button;public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // 生命周期方法
// Log.d("SecondActivity", this.toString());Log.d("SecondActivity", "Task id is"+getTaskId());super.setContentView(R.layout.second); // 设置要使用的布局管理器button = (Button) findViewById(R.id.btn2);button.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent = new Intent(SecondActivity.this, ThirdActivity.class);// 跳到MainActivitystartActivity(intent);}});}@Overrideprotected void onDestroy() {super.onDestroy();Log.d("SecondActivity", "onDestroy");}
}
package com.example.pc.androidtoptest;/*** Created by pc on 2016/4/18.*/
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;import com.example.androidtoptest.R;public class ThirdActivity extends Activity {public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // 生命周期方法Log.d("ThirdActivity","Task id is"+getTaskId());super.setContentView(R.layout.third); // 设置要使用的布局管理器}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.example.androidtoptest.MainActivity"android:orientation="vertical"android:padding="10dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><Buttonandroid:id="@+id/btn"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="button"/></LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.androidtoptest.MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="button2"/></LinearLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.androidtoptest.MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world" /><Buttonandroid:id="@+id/btn2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="button3"/></LinearLayout>

Activity中四大启动模式相关推荐

  1. Activity中AndroidMainfest启动模式

    Activity中AndroidMainfest启动模式 Android开发者在AndroidMainifest文件中一共设计了四种启动模式:standard,singleTop,singleTask ...

  2. Activity之四大启动模式

    介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.sin ...

  3. android 怎么自定义任务栈,Android中的Activity详解--启动模式与任务栈

    目录 Activity 生命周期 任务栈 启动模式 Intent Flag taskAffinity属性 1.Activity activity的简单介绍就不写了,作为最常用的四大组件之一,肯定都很熟 ...

  4. Activity四种启动模式详细整理

    Activity四种启动模式详细整理 1.Standard standard模式,顾名思议就是标准启动模式,默认启动模式. 一个Activity如果不知道它的启动模式,那么它就是按Standard模式 ...

  5. android的四种启动模式,(转)彻底弄懂Activity四大启动模式

    原地址:https://blog..net/mynameishuangshuai/article/details/51491074 最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解. ...

  6. Android入门:Activity四种启动模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Android Manifest.xml中的标签的and ...

  7. Android Activity Launch Mode 启动模式详解

    简介 android:launchMode 属性能设置 Activity 对象启动时是否使用已有的实例还是多次创建,会使得交互设计更加良好,也能避免很多问题. 它是 Androidmanifest.x ...

  8. Activity的launchMode启动模式 day7

    2019独角兽企业重金招聘Python工程师标准>>> Activity的launchMode day7 在功能清单AndroidManifest.xml 里 设置 启动模式 如: ...

  9. Android入门之Activity四种启动模式

    一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的<Activity>标签的android:launchMode属性设置: 启 ...

最新文章

  1. 快速学习 async await 的使用, Demo 解析
  2. STM32f103 can的两个接收fifo使用方法
  3. 三十四、多线程真的比单线程快?
  4. 设置单元格填充方式_单元格的选择及设置单元格格式
  5. 给大家发一个DDOS防御包算法公式
  6. 登录权限验证token
  7. 捻花成佛:成为股市高手需要读多少书
  8. 用计算机弹出古诗,电脑屏保不断变化的诗句
  9. (转)《C++ Qt 编程视频教程》(C++ Qt Programming)[MP4]
  10. 过采样:SMOTE算法
  11. Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本
  12. TCP/IP系列之数据链路层
  13. 莫队算法二(树上莫队cot2,Haruna’s Breakfast)
  14. 70.JAVA编程思想——Web应用
  15. phpredis与predis的区别
  16. fpc : 调用 MS TTS 读中英文
  17. 使用mongodump和mongostore对mongodb数据库迁移实践总结
  18. Dapper数据库字段(列)与实体属性名不一致,通过Column特性自动注入映射
  19. 76. Lotus Notes编程中的命名习惯
  20. IaC示例:Terraform Ansible自动化创建K3S集群

热门文章

  1. SpringCloud微服务权限控制(一)概述
  2. 西门子smartclient怎么用_西门子200SMART PLC软件各功能怎么用?编程必备!
  3. Cinemachine教程 | Unity中如何制作路径动画?
  4. (八)构建一个Docker容器来训练Deep Fake Autoencoders
  5. HtmlEditor在Blazor中编写
  6. 微软官方上线 Python 教程
  7. azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF
  8. python 基础 --数字、列表、元组、字典、字符串
  9. 晶体封装越小esr越大_晶振
  10. python 热力图_python数据分析:数据缺失机制及利用missingno库对缺失可视化