Activity中四大启动模式
在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中四大启动模式相关推荐
- Activity中AndroidMainfest启动模式
Activity中AndroidMainfest启动模式 Android开发者在AndroidMainifest文件中一共设计了四种启动模式:standard,singleTop,singleTask ...
- Activity之四大启动模式
介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的标签的android:launchMode属性设置: 启动模式有4种,分别为standard.sin ...
- android 怎么自定义任务栈,Android中的Activity详解--启动模式与任务栈
目录 Activity 生命周期 任务栈 启动模式 Intent Flag taskAffinity属性 1.Activity activity的简单介绍就不写了,作为最常用的四大组件之一,肯定都很熟 ...
- Activity四种启动模式详细整理
Activity四种启动模式详细整理 1.Standard standard模式,顾名思议就是标准启动模式,默认启动模式. 一个Activity如果不知道它的启动模式,那么它就是按Standard模式 ...
- android的四种启动模式,(转)彻底弄懂Activity四大启动模式
原地址:https://blog..net/mynameishuangshuai/article/details/51491074 最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解. ...
- Android入门:Activity四种启动模式
2019独角兽企业重金招聘Python工程师标准>>> 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Android Manifest.xml中的标签的and ...
- Android Activity Launch Mode 启动模式详解
简介 android:launchMode 属性能设置 Activity 对象启动时是否使用已有的实例还是多次创建,会使得交互设计更加良好,也能避免很多问题. 它是 Androidmanifest.x ...
- Activity的launchMode启动模式 day7
2019独角兽企业重金招聘Python工程师标准>>> Activity的launchMode day7 在功能清单AndroidManifest.xml 里 设置 启动模式 如: ...
- Android入门之Activity四种启动模式
一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的<Activity>标签的android:launchMode属性设置: 启 ...
最新文章
- 快速学习 async await 的使用, Demo 解析
- STM32f103 can的两个接收fifo使用方法
- 三十四、多线程真的比单线程快?
- 设置单元格填充方式_单元格的选择及设置单元格格式
- 给大家发一个DDOS防御包算法公式
- 登录权限验证token
- 捻花成佛:成为股市高手需要读多少书
- 用计算机弹出古诗,电脑屏保不断变化的诗句
- (转)《C++ Qt 编程视频教程》(C++ Qt Programming)[MP4]
- 过采样:SMOTE算法
- Msm8960(APQ8064)平台的MSM-AOSP-kitkat编译适配(3):寻找正确的代码版本
- TCP/IP系列之数据链路层
- 莫队算法二(树上莫队cot2,Haruna’s Breakfast)
- 70.JAVA编程思想——Web应用
- phpredis与predis的区别
- fpc : 调用 MS TTS 读中英文
- 使用mongodump和mongostore对mongodb数据库迁移实践总结
- Dapper数据库字段(列)与实体属性名不一致,通过Column特性自动注入映射
- 76. Lotus Notes编程中的命名习惯
- IaC示例:Terraform Ansible自动化创建K3S集群
热门文章
- SpringCloud微服务权限控制(一)概述
- 西门子smartclient怎么用_西门子200SMART PLC软件各功能怎么用?编程必备!
- Cinemachine教程 | Unity中如何制作路径动画?
- (八)构建一个Docker容器来训练Deep Fake Autoencoders
- HtmlEditor在Blazor中编写
- 微软官方上线 Python 教程
- azw3转换为pdf_干货:如何Java 将 Word 文档转换为 PDF
- python 基础 --数字、列表、元组、字典、字符串
- 晶体封装越小esr越大_晶振
- python 热力图_python数据分析:数据缺失机制及利用missingno库对缺失可视化