1. 程式人生 > >Activity的四種LaunchMode(寫的真心不錯,建議大家都看看)

Activity的四種LaunchMode(寫的真心不錯,建議大家都看看)

合抱之木,生於毫末;九層之臺,起於累土;千里之行,始於足下。《老子》

今天在社群看到有朋友問“如何在半年內成為頂級架構師”,有網友道“關燈睡覺,不用半年的...”,的確,做夢還來的快一些。作為一個程式設計師,樹立遠大的目標是值得欣賞的,但不能只去空想,要一步一步地實踐才行。成大事者,須從小事做起;萬事起於忽微,量變引起質變。

我們今天要講的是Activity的四種launchMode。

launchMode在多個Activity跳轉的過程中扮演著重要的角色,它可以決定是否生成新的Activity例項,是否重用已存在的Activity例項,是否和其他Activity例項公用一個task裡。這裡簡單介紹一下task的概念,task是一個具有棧結構的物件,一個task可以管理多個Activity,啟動一個應用,也就建立一個與之對應的task。

Activity一共有以下四種launchMode:

1.standard

2.singleTop

3.singleTask

4.singleInstance

我們可以在AndroidManifest.xml配置<activity>的android:launchMode屬性為以上四種之一即可。

下面我們結合例項一一介紹這四種lanchMode:

1.standard

standard模式是預設的啟動模式,不用為<activity>配置android:launchMode屬性即可,當然也可以指定值為standard。

我們將會一個Activity,命名為FirstActivity,來演示一下標準的啟動模式。FirstActivity程式碼如下:

  1. package com.scott.launchmode;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.view.View;  
  6. import android.widget.Button;  
  7. import android.widget.TextView;  
  8. publicclass FirstActivity extends Activity {  
  9.     @Override
  10.     publicvoid onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.first);  
  13.         TextView textView = (TextView) findViewById(R.id.textView);  
  14.         textView.setText(this.toString());  
  15.         Button button = (Button) findViewById(R.id.button);  
  16.         button.setOnClickListener(new View.OnClickListener() {  
  17.             @Override
  18.             publicvoid onClick(View v) {  
  19.                 Intent intent = new Intent(FirstActivity.this, FirstActivity.class);  
  20.                 startActivity(intent);  
  21.             }  
  22.         });  
  23.     }  
  24. }  
我們FirstActivity介面中的TextView用於顯示當前Activity例項的序列號,Button用於跳轉到下一個FirstActivity介面。

然後我們連續點選幾次按鈕,將會出現下面的現象:

我們注意到都是FirstActivity的例項,但序列號不同,並且我們需要連續按後退鍵兩次,才能回到第一個FristActivity。standard模式的原理如下圖所示:


如圖所示,每次跳轉系統都會在task中生成一個新的FirstActivity例項,並且放於棧結構的頂部,當我們按下後退鍵時,才能看到原來的FirstActivity例項。

這就是standard啟動模式,不管有沒有已存在的例項,都生成新的例項。

2.singleTop

我們在上面的基礎上為<activity>指定屬性android:launchMode="singleTop",系統就會按照singleTop啟動模式處理跳轉行為。我們重複上面幾個動作,將會出現下面的現象:




相關推薦

ActivityLaunchMode(真心不錯建議大家看看)

合抱之木,生於毫末;九層之臺,起於累土;千里之行,始於足下。《老子》 今天在社群看到有朋友問“如何在半年內成為頂級架構師”,有網友道“關燈睡覺,不用半年的...”,的確,做夢還來的快一些。作為一個程式設計師,樹立遠大的目標是值得欣賞的,但不能只去空想,要一步一步

轉載一篇關於springmvc下session的用法覺得作者不錯大家分享一下

繫結模型物件中某個屬性 Spring 2.0 定義了一個 org.springframework.ui.ModelMap 類,它作為通用的模型資料承載物件,傳遞資料供檢視所用。我們可以在請求處理方法中宣告一個 ModelMap 型別的入參,Spring 會將本次請求模型物

Android中的Activity啟動模式(launchMode)(面試必問)

android:launchMode standard 預設標準的啟動模式,每次startActivity(Intent intent)請求都建立一個新的activity實 例,適用於大多數場景。 singleTop 單一頂部,如果要啟動的activity在任務棧的頂部已經存在,不會建立新的例項,而是呼叫 o

基礎總結篇之二:ActivitylaunchMode

合抱之木,生於毫末;九層之臺,起於累土;千里之行,始於足下。《老子》 今天在社群看到有朋友問“如何在半年內成為頂級架構師”,有網友道“關燈睡覺,不用半年的...”,的確,做夢還來的快一些。作為一個程式設計師,樹立遠大的目標是值得欣賞的,但不能只去空想,要一步一步地實踐

java線程池簡介使用

參數 有一個 例子 system pre mit time style over 為什麽使用線程池 1.減少了創建和銷毀線程的次數,每個工作線程都可以被重復利用,可執行多個任務。2.可以根據系統的承受能力,調整線程池中工作線線程的數目,防止消耗過多的內存 線程池流程

【筆記】Activity啟動模式區別

參考:https://blog.csdn.net/edisonchang/article/details/49981457 activity 啟動的四種模式 : AndroidManifest.xml :: android:launchMode="???" 1.standard:【不會

php基礎演算法:冒泡選擇插入和快速排序法 程式碼練習

function maopao($arr,$len) { for($i=1;$i<$len;$i++) { for($j=0;$j<$len-$i;$j++) { if($arr[$j]>$arr[$j+1])

方案IO流 (JAVA)

File類用於訪問檔案或目錄的屬性 流:指一連串流動的字元,是以先進先出的方式傳送資訊的通道。程式和資料來源之間是通過流聯絡起來的。 第一套:位元組流讀取寫入方案 FileInputStream :位元組流方式讀取文字檔案 FileInputStream fi

安卓launchMode的理解

反正 就是想起啥就看點啥,記點啥 今天看到,   隱約記得以前應該也是有去看過然後瞭解過的,但是當我再一次看到這個的時候還是,emmm,不知道具體啥意思。小計一下,增加印象。 1、安卓中有四種launchMode模式分別是: (1) standard

不錯轉--讓我們從NodeJS Streams開始從頭開始編寫一個Web伺服器

看完這篇文章後,真心的感覺閱讀原始碼的好處 Let's code a web server from scratch with NodeJS Streams https://www.codementor.io/ziad-saab/let-s-code-a-web-server-from-sc

Activity啟動模式的認識

最近看了一些前輩的文章,有了一些新的認識,不僅僅是知識,包括對待事情的態度。記錄下來,作為自己態度的見證。首先在android中對於Activity的例項是通過棧(Task)來進行管理的,棧是一種先進後出的資料結構。主要的操作就是進棧和出棧。簡單的如下圖所示。

總結:linux驅動之I2C至少方法

    總結在linux環境下四種讀寫I2C裝置的方法:一:讀寫/dev/i2c-x裝置結點    /dev/i2c-x裝置結點對應的驅動檔案為核心目錄drivers/i2c下自帶的i2c-dev.c檔案,通讀此檔案可以發現它的工作流程。 1、通過register_chrde

Activity啟動模式的特點

一.Activity四種啟動模式的特點 1.standard模式  Activity預設的啟動模式,依次入棧出棧,滿足"先進後出"的原則。這種模式下,可以有多個相同的例項,也允許多個相同Activity疊加 2.singleTop模式  當啟動的Activity已

Imageloader圖片顯示(圓形淡入圓角修飾)使用

這一長篇我們來看這四種圖片顯示在程式碼中如何使用,以開源元件中的例子為準。 先看一組圓形和淡入動畫的效果  這個淡入為了能看清效果我的時間改成了10s; 圓角的效果圖:   1.圓形圖片的使用 options =newDisplayImageOption

Android基礎之Activity啟動模式和task相關

1 啟動模式介紹 啟動模式簡單地說就是Activity啟動時的策略,在AndroidManifest.xml中的標籤的android:launchMode屬性設定; 啟動模式有4種,分別為standard、singleTop、singleTask、singleI

activity 啟動方式

    這種型別的activity在執行後會被安排到單間,除了第一次建立的時候呼叫oncreate,後面不會再調,但是會呼叫onNewIntent。網上的技術文章都說像是瀏覽器,確實有點像,就這麼理解吧。但是發現宣告成singleInstance型別的activity中呼叫startActivityForRe

Android中Activity啟動模式和taskAffinity屬性詳解

在android應用開發中,打造良好的使用者體驗是非常重要的。而在使用者體驗中,介面的引導和跳轉是值得深入研究的重要內容。在開發中,與介面跳轉聯絡比較緊密的概念是Task(任務)和Back Stack(回退棧)。activity的啟動模式會影響Task和Back Stack

Activity啟動模式的利用場景

一.singleTask: 需求說明: 如果自己的客戶端處於執行狀態,按下Home鍵後臺掛起。此時如果使用微信調起自己的客戶端某 個頁面,不做任何處理的情況下,按下回退或者當前 Activity.finish(),頁面都會停留在自己的客戶端(因為自己的Application

Activity啟動模式

Activity啟動方式有四種,分別是: standard singleTop singleTask singleInstance 可以根據實際的需求為Activity設定對應的啟動模式,從而可以避免建立大量重複的Activity等問題。 設定Activity的啟動模式,只

Android activity啟動模式及taskAffinity屬性總結(附例子原始碼)

Android activity四種啟動模式總結本人目前在看 Android 開發藝術探索 這本書,書中對啟動模式的講解比較詳細,所以自己想總結下。如果各位能認真的看上一遍,相信會對android activity的啟動模式會有更加深刻的印象。Android啟動模式: