• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 安卓學習筆記五(activity啟動模式、回傳數據)

    標簽: Android

    目錄

    一、Activity的啟動模式
    二、Activity間的數據回傳(startActivityForResult()方法)

    Activity的啟動模式

    activity的四種啟動模式:
    ①standard
    ②singleTop
    ③singleTask
    ④singleInstance

    如何修改activity的啟動模式呢?
    在我們的AndroidManifest.xml中修改activity的啟動模式

    一、standard模式
    standard模式是默認的啟動模式,即使我們不去改動AndroidManifest.xml文件,它也默認這種啟動模式
    特點:每啟動一個activity就會在棧頂(Android的任務棧是一種用來存放Activity實例的容器)創建一個新的實例。
    在這里插入圖片描述
    從圖中我們可以看到,
    ①一開始棧里只有Activity1
    ②第二步StartActivity2時,把實例Activity2壓入棧,這時棧內有Activity1和Activity2,其中Activity2在棧頂
    ③第三步StartActivity2時,不管棧內有沒有Activity2實例又創建了一個新的Activity2壓入棧,這時棧內有Activity1和2個Activity2,新創建的Activity2在棧頂
    ④第四步back,③中新建的Activity2被彈出,這時棧內只剩下Activity1和Activity2,②中創建的Activity2在棧頂
    ⑤第五步back,②中創建的Activity2被彈出,這時棧內只剩下Activity1
    ⑥第六步back,Activity1被彈出,銷毀棧,從內存中消失

    二、singleTop模式
    特點:該模式會判斷要啟動的Activity實例是否存在棧頂,若在棧頂則直接復用,不然創建新的實例
    在這里插入圖片描述
    從圖中我們可以看到,
    ①一開始棧里只有Activity1
    ②第二步StartActivity2時,把實例Activity2壓入棧,這時棧內有Activity1和Activity2,其中Activity2在棧頂
    ③第三步StartActivity2時,我們發現棧頂已經有Activity2實例了,直接復用,不再創建新的Activity2實例,這時棧內有Activity1和Activity2
    ④第四步StartActivity1,判斷棧頂不是Activity1實例,所以創建新的Activity1實例壓入棧,這時棧內有2個Activity1和1個Activity2,新創建的Activity1在棧頂
    ⑤第五步back,④中新建的Activity1被彈出,這時棧內只剩下Activity1和Activity2,Activity2在棧頂
    ⑥第六步back,Activity2被彈出,這時棧內只剩下Activity1
    ⑦第七步back,Activity1被彈出,銷毀棧,從內存中消失

    三、singleTask模式
    特點:每次啟動Activity時,先檢查棧中是否存在當前Activity實例,如果存在直接使用并把當前Activity上面的所有實例彈出
    在這里插入圖片描述
    從圖中我們可以看到,
    ①一開始棧里只有Activity1
    ②第二步StartActivity2時,把實例Activity2壓入棧,這時棧內有Activity1和Activity2,其中Activity2在棧頂
    ③第三步StartActivity3,判斷棧中沒有Activity3,所以創建新的Activity3實例壓入棧,此時棧內有Activity1和Activity2和Activity3,其中Activity3在棧頂
    ④第四步StartActivity1,判斷棧內是否存在Activity1實例,我們發現棧內存在Activity1,所以將Activity1上面的所有實例彈出,這時棧內僅剩一個Activity1
    ⑤第五步back,Activity1被彈出,銷毀棧,從內存中清除

    四、singleInstance模式
    特點:singleInstance模式的Activity會啟動一個新的任務棧來管理Activity實例,無論從哪個任務棧中啟動該Activity,該實例在整個系統中只有一個
    在這里插入圖片描述
    從圖中我們可以看到,
    ①一開始棧里只有Activity1
    **②第二步StartActivity2時,開辟一個新的棧存放Activity2,這時有一個TaskStack1存放Activity1和一個TaskStack2存放Activity2,Activity2在前臺
    ③第三步StartActivity1,我們發現已存在Activity1實例,所以我們將任務棧TaskStack1轉移到前臺,這時有一個TaskStack1存放Activity1和一個TaskStack2存放Activity2,Activity1在前臺
    ④第四步back,銷毀TaskStack1,此時只有一個任務棧TaskStack2存放著Activity2實例
    ⑤第五步back,銷毀Activity2,釋放內存

    Activity的數據回傳

    有些時候我們從MainActivity界面跳轉到SecondActivity界面,在SecondActivity界面進行一些操作,在關閉SecondActivity界面時,我們希望從該界面返回一些數據到MainActivity界面,那我們要怎么做呢?

    我們就要利用數據回傳
    (MainActivity.java):
    startActivityForResult( )啟動Activity

    Intent intent = new Intent();
    intent.setClass(MainActivity.this,SecondActivity.class);//從當前MainActivity跳轉到SecondActivity
    startActivityForResult(intent,1);//1是請求表示碼,可以自己規定
    

    (SecondActivity.java)返回數據:

    Intent data = new Intent();//這個data不同于上面的intent,上面的intent是用于頁面跳轉,而這里的data是用于存放數據
    data.putExtra("username","Amy");//存放數據
    setResult(2,data);//2是結果標識碼
    finish();
    

    **setResult()**只負責返回數據,沒有跳轉功能,所以它常和finish()方法配套使用,finish()方法是用來結束目前的這個activity的。

    此時,數據已經返回了,那么我們怎么在MainActivity中獲取返回的數據呢?我們要重寫**onActivityResult()**方法來獲取數據

    @Override
    protected void onActivityResult(int resquestCode,int resultCode,Intent data){
    	super.onActivityResult(resquestCode,resultCode,data);
    	if(resquestCode==1&&resultCode==2){
    	String username = data.getStringExtra("username");//獲取回傳的數據
    	Toast.makeText(MainActivity.this,username,Toast.LENGTH_SHORT).show();
    	}
    }
    
    版權聲明:本文為weixin_43354214原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_43354214/article/details/104895336

    智能推薦

    Activity之間的數據回傳

    Activity之間的數據回傳 這里我們拿MainActivity和SecondActivity來說明。 區別 我們拿充值回傳舉例 這上面首先startActivityForResult(intent, Contants.REQUESTCODE)中的第一個參數為意圖對象,第二個參數為自己定義的請求碼,這個其實我定義的是 1,protected void onActivityResult(int r...

    安卓開發藝術探索一——Activity的生命周期和啟動模式

    文章目錄 Activity的生命周期和啟動模式 Activity的生命周期 正常情況下的生命周期 異常情況下的生命周期 1.系統配置改變導致活動被殺死并重新創建 2.資源內存不足導致低優先級的Activity被殺死 Activity的啟動模式 啟動模式的設置 IntentFilter的匹配規則 1.action的匹配規則 2.category的匹配規則 3.data的匹配規則 參考資料 Activ...

    Android安卓應用開發:activity回調機制

    實現效果 為項目添加菜單,當點擊“退出”按鈕時詢問是否確定要退出,當點擊“配置”按鈕時顯示配置信息 1. 新鍵menu布局配置文件 在res目錄下右鍵,選擇new -> android resource file -> 選擇文件類型為menu,完成后會生成menu目錄以及menu.xml文件 添加menu Item, 把menu Item...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    猜你喜歡

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    精品国产乱码久久久久久蜜桃不卡