国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

詳解Android中Activity的四大啟動模式實驗簡述

2019-12-12 04:20:53
字體:
來源:轉載
供稿:網(wǎng)友

作為Android四大組件之一,Activity可以說是最基本也是最常見的組件,它提供了一個顯示界面,從而實現(xiàn)與用戶的交互,作為初學者,必須熟練掌握。今天我們就來通過實驗演示,來幫助大家理解Activity的四大啟動模式。

演示效果如下:

第一步:實驗前準備,相關配置文件以及Activity的建立

(1)AndroidMainfest.xml配置文件

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"  package="com.example.administrator.intentflags">  <application    android:allowBackup="true"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"    android:supportsRtl="true"    android:theme="@style/AppTheme">    <activity android:name=".MainActivity">      <intent-filter>        <action android:name="android.intent.action.MAIN" />        <category android:name="android.intent.category.LAUNCHER" />      </intent-filter>    </activity>    //另外兩個activity    <activity android:name=".Main2Activity"> </activity>    <activity android:name=".Main3Activity"></activity>  </application></manifest>

(2)layout中三個activity的三個布局文件activity_main.xml(這里演示一個,其余兩個只是下面TextView文字不一樣)

<?xml version="1.0" encoding="utf-8"?><LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"  xmlns:tools="http://schemas.android.com/tools"  android:id="@+id/activity_main"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context="com.example.administrator.intentflags.MainActivity">  <Button    android:text="第一個頁面"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:onClick="click1" />  <Button    android:text="第二個頁面"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:onClick="click2" />  <Button    android:text="第三個頁面"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:onClick="click3" />  <TextView    android:layout_width="match_parent"    android:layout_height="match_parent"    //其余兩個僅文字不一樣    android:text="第一個頁面"    android:textSize="50sp"/></LinearLayout>

(3)java中三個activity的實現(xiàn)代碼MainActivity.java(僅演示一個,其他兩個完全相同)

import android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.View;/** * Created by panchengjia on 2016/12/14. */public class MainActivity extends AppCompatActivity {  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    //其他兩個界面此處引用各自對應的layout文件    setContentView(R.layout.activity_main);  }  public void click1(View view){    Intent intent = new Intent(this,MainActivity.class);    startActivity(intent);    //記錄Taskid用于實驗說明    Log.i("Tag","頁面一taskId:"+getTaskId());  }  public void click2(View view){    Intent intent = new Intent(this,Main2Activity.class);    startActivity(intent);    Log.i("Tag","頁面二taskId:"+getTaskId());  }  public void click3(View view){    Intent intent = new Intent(this,Main3Activity.class);    startActivity(intent);    Log.i("Tag","頁面三taskId:"+getTaskId());  }}

第二步:standard默認(標準)模式下的演示實驗

默認模式,可以不用寫配置。在這個模式下,都會默認創(chuàng)建一個新的實例。因此,在這種模式下,可以有多個相同的實例,也允許多個相同Activity疊加。

我們的操作結果如下圖:

log圖如下(未記錄回退log):

通過分析操作圖以及l(fā)og,得出這種Standard模式是每次都會創(chuàng)建新的Activity對象,當點擊返回按鈕時,他會將棧頂(當前Activity)消滅,然后跳 到下一層,這種模式可能大多數(shù)情況下不是我們需要的,因為對系統(tǒng)性能的消耗過大。

第三步:singleTop模式下的演示實驗(設置頁面二為singleTop)

在當前任務棧中,判斷棧頂是否為當前的Activity,如果是,就直接使用,如果不是,再創(chuàng)建新的Activity放入棧頂。

AndroidMainfest.xml中設置代碼如下:

<activity android:name=".Main2Activity"      android:launchMode="singleTop"> </activity>

我們的操作結果如下圖:

log圖如下(未記錄回退log):

分析此啟動模式和singleTop在名字上即可看出區(qū)別,即singleTop每次只檢測當前棧頂?shù)腁ctivity是否是我們需要請求創(chuàng)建的,而 singleTask則會檢測棧中全部的Activity對象,從上向下,如果檢測到是我們所請求的則會消滅此Activity對象上面的對象,直接把檢測到的我們需要的Activity置為棧頂。

第四步:singleTask模式下的演示實驗(設置頁面二為singleTask)

在當前任務棧中,判斷棧里是否存在Activity,如果不存在,創(chuàng)建一個新Activity入棧,如果存在,會把該Activity之上的所有Activity清除出棧,顯示當前Activity。

AndroidMainfest.xml中設置代碼如下:

  <activity android:name=".Main2Activity"      android:launchMode="singleTask"> </activity>

我們的操作結果如下圖:

log圖如下(未記錄回退log):

只有一個實例。在同一個應用程序中啟動他的時候,若Activity不存在,則會在當前task創(chuàng)建一個新的實例,若存在,則會把task中在其之上的其它Activity destory掉并調(diào)用它的onNewIntent方法。如果是在別的應用程序中啟動它,則會新建一個task,并在該task中啟動這個Activity,singleTask允許別的Activity與其在一個task中共存,也就是說,如果我在這個singleTask的實例中再打開新的Activity,這個新的Activity還是會在singleTask的實例的task中。

第五步:singleInstance模式下的演示實驗(設置頁面二為singleInstance)

新創(chuàng)建一個任務棧,放入新創(chuàng)建的Activity,該任務棧只允許存在一個Activity實例,如果已存在,那么會切換到該任務棧。

AndroidMainfest.xml中設置代碼如下:

<activity android:name=".Main2Activity"       android:launchMode="singleInstance"> </activity>

我們的操作結果如下圖:

 

log圖如下(未記錄回退log):

瀏覽器工作原理類似,我們都知道在多個程序中訪問瀏覽器時,如果當前瀏覽器沒有打開,則打開瀏覽器,否則會在當前打開的瀏覽器中訪問。此模式會節(jié)省大量的系統(tǒng)資源,因為他能保證要請求的Activity對象在當前的棧中只存在一個。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 元阳县| 三河市| 石台县| 汽车| 贵定县| 棋牌| 临城县| 任丘市| 平远县| 师宗县| 贵定县| 迭部县| 怀宁县| 清水河县| 德清县| 隆尧县| 黔东| 怀安县| 盘山县| 林周县| 胶州市| 贵德县| 永登县| 陵川县| 原阳县| 连平县| 海兴县| 巴楚县| 三明市| 建阳市| 疏附县| 道孚县| 海宁市| 嘉祥县| 曲松县| 晋江市| 玉山县| 沐川县| 邢台县| 望谟县| 荔波县|