ANDROID中ACTIVITY的四大启动模式实验简述
来源:互联网 发布:mac日版中文输入法切换 编辑:程序博客网 时间:2024/05/21 15:44
作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握。今天我们就来通过实验演示,来帮助大家理解Activity的四大启动模式。
演示效果如下:
第一步:实验前准备,相关配置文件以及Activity的建立
(1)AndroidMainfest.xml配置文件
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.administrator.intentflags"> 4 <application 5 android:allowBackup="true" 6 android:icon="@mipmap/ic_launcher" 7 android:label="@string/app_name" 8 android:supportsRtl="true" 9 android:theme="@style/AppTheme">10 <activity android:name=".MainActivity">11 <intent-filter>12 <action android:name="android.intent.action.MAIN" />13 14 <category android:name="android.intent.category.LAUNCHER" />15 </intent-filter>16 </activity>17 //另外两个activity18 <activity android:name=".Main2Activity"> </activity>19 <activity android:name=".Main3Activity"></activity>20 </application>21 </manifest>
(2)layout中三个activity的三个布局文件activity_main.xml(这里演示一个,其余两个只是下面TextView文字不一样)
1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 xmlns:tools="http://schemas.android.com/tools" 5 android:id="@+id/activity_main" 6 android:layout_width="match_parent" 7 android:layout_height="match_parent" 8 android:orientation="vertical" 9 tools:context="com.example.administrator.intentflags.MainActivity">10 <Button11 android:text="第一个页面"12 android:layout_width="match_parent"13 android:layout_height="wrap_content"14 android:onClick="click1" />15 <Button16 android:text="第二个页面"17 android:layout_width="match_parent"18 android:layout_height="wrap_content"19 android:onClick="click2" />20 <Button21 android:text="第三个页面"22 android:layout_width="match_parent"23 android:layout_height="wrap_content"24 android:onClick="click3" />25 <TextView26 android:layout_width="match_parent"27 android:layout_height="match_parent"28 //其余两个仅文字不一样29 android:text="第一个页面"30 android:textSize="50sp"/>31 </LinearLayout>
(3)java中三个activity的实现代码MainActivity.java(仅演示一个,其他两个完全相同)
1 import android.content.Intent; 2 import android.support.v7.app.AppCompatActivity; 3 import android.os.Bundle; 4 import android.util.Log; 5 import android.view.View; 6 /** 7 * Created by panchengjia on 2016/12/14. 8 */ 9 public class MainActivity extends AppCompatActivity {10 11 @Override12 protected void onCreate(Bundle savedInstanceState) {13 super.onCreate(savedInstanceState);14 //其他两个界面此处引用各自对应的layout文件15 setContentView(R.layout.activity_main);16 }17 public void click1(View view){18 Intent intent = new Intent(this,MainActivity.class);19 startActivity(intent);20 //记录Taskid用于实验说明21 Log.i("Tag","页面一taskId:"+getTaskId());22 }23 public void click2(View view){24 Intent intent = new Intent(this,Main2Activity.class);25 startActivity(intent);26 Log.i("Tag","页面二taskId:"+getTaskId());27 }28 public void click3(View view){29 Intent intent = new Intent(this,Main3Activity.class);30 startActivity(intent);31 Log.i("Tag","页面三taskId:"+getTaskId());32 }33 }
第二步:standard默认(标准)模式下的演示实验
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
我们的操作结果如下图:
log图如下(未记录回退log):
通过分析操作图以及log,得出这种Standard模式是每次都会创建新的Activity对象,当点击返回按钮时,他会将栈顶(当前Activity)消灭,然后跳 到下一层,这种模式可能大多数情况下不是我们需要的,因为对系统性能的消耗过大。
第三步:singleTop模式下的演示实验(设置页面二为singleTop)
在当前任务栈中,判断栈顶是否为当前的Activity,如果是,就直接使用,如果不是,再创建新的Activity放入栈顶。
AndroidMainfest.xml中设置代码如下:
1 <activity android:name=".Main2Activity"2 android:launchMode="singleTop"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
分析此启动模式和singleTop在名字上即可看出区别,即singleTop每次只检测当前栈顶的Activity是否是我们需要请求创建的,而 singleTask则会检测栈中全部的Activity对象,从上向下,如果检测到是我们所请求的则会消灭此Activity对象上面的对象,直接把检测到的我们需要的Activity置为栈顶。
第四步:singleTask模式下的演示实验(设置页面二为singleTask)
在当前任务栈中,判断栈里是否存在Activity,如果不存在,创建一个新Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity。
AndroidMainfest.xml中设置代码如下:
1 <activity android:name=".Main2Activity"2 android:launchMode="singleTask"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个Activity,singleTask允许别的Activity与其在一个task中共存,也就是说,如果我在这个singleTask的实例中再打开新的Activity,这个新的Activity还是会在singleTask的实例的task中。
第五步:singleInstance模式下的演示实验(设置页面二为singleInstance)
新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity实例,如果已存在,那么会切换到该任务栈。
AndroidMainfest.xml中设置代码如下:
1 <activity android:name=".Main2Activity"2 android:launchMode="singleInstance"> </activity>
我们的操作结果如下图:
log图如下(未记录回退log):
浏览器工作原理类似,我们都知道在多个程序中访问浏览器时,如果当前浏览器没有打开,则打开浏览器,否则会在当前打开的浏览器中访问。此模式会节省大量的系统资源,因为他能保证要请求的Activity对象在当前的栈中只存在一个。
- Android中Activity的四大启动模式实验简述
- ANDROID中ACTIVITY的四大启动模式实验简述
- Android Activity的四大启动模式
- Android Activity的四大启动模式
- Activity中四大启动模式
- Activity的四大启动模式
- Android的四大组件之-Activity的启动模式
- Android应用开发(四):Activity的四大启动模式
- Android四大组件(1.2)--Activity的启动模式
- Android四大组件之一:Activity的启动模式
- Android四大组件之Activity的四种启动模式
- Android Activity的任务栈和四大启动模式
- Android开发之Activity四大启动模式
- android之activity四大启动模式
- Android activity四大启动模式详解
- Android基础之Activity四大启动模式
- Android四大组件之Activity--启动模式
- Android activity四大启动模式详解
- SystemUI启动流程及主体布局介绍
- 前端案例分享:简易手风琴
- linux下mysql数据库定时备份
- Android保存图片到系统图库
- Docker的主要作用是什么?
- ANDROID中ACTIVITY的四大启动模式实验简述
- 系统架构培训:矩阵,封装,一个案例教你激发客户潜藏的需求!
- WebView隐藏滚动条,隐藏缩放按钮,适应手机的分辨率
- Android应用开发———Android中的基本程序单元Activity
- 【mem_fun/mem_fun_ref】成员函数作为函数对象使用
- c# 与 c++基础交互
- 为什么2个相邻div的margin只有1个生效?
- ODS和数据仓库的区别
- ANDROID中ACTIVITY运行时屏幕方向与显示方式详解