Android activity的知識點

2021-06-29 03:08:48 字數 3072 閱讀 7963

activity元件之間跳**

1. 顯式意圖.(一般使用顯式意圖 都是在自己的專案中.)

一般用在, 知道某乙個類名, 並且可以引用到那個類的位元組碼.

使用最多的: intent intent = new intent(this, secondactivity.class);

2. 隱式意圖.(一般適用在不同應用程式之間介面的跳轉, 例如: 撥號器.)

不知道類名, 也不知道包名. 但是知道了那個頁面的動作action:intent.action_call;

描述隱式意圖時, 如果需要新增intent.addcategory("android.intent.category.default");

可以不用新增. 預設值就是已經新增了的"android.intent.category.default"

uri 和 url

uri 統一資源識別符號

url 統一資源定位符.

隱式跳轉時, 設定data和type時, 需要一起設定, 單獨設定會把某乙個先設定的值置null.

setdataandtype(data, type);

activity頁面之間傳遞和回傳資料:

傳遞資料: 頁面傳遞資料時, 不建議傳遞過多的資料. 會影響使用者體驗效果.

// 第一種, 可以傳遞八大基本型別

intent.putextra("name", name);

// 第二種, 可以傳遞八大基本型別, 使用乙個bundle(資料捆, map集合)物件封裝起來. 便於資料多的情況下區分資料.

bundle value = new bundle();

value.putstring("bundle_name", name);

intent.putextra("bundle1", value);

startactivity(intent);

// 第三種, 想傳遞一種自己定義的物件 person

person person = new person();

person.setname(name);

intent.putextra("person", person);

回傳資料:

1. 在開啟介面時, 需要呼叫的方法是: startactivityforresult(intent, 999);

2. 當被開啟的頁面關閉時, 呼叫了setresult(888, data);方法.

3. 在第乙個頁面中的onactivityresult方法中取資料.

activity生命週期:

onresume 獲取焦點, 當前的activity可以直接跟使用者進行互動.

onpause  暫停. 當前沒有獲取焦點. 當前activity可以被看到.

當開乙個activity把前乙個activity給完全蓋住時, 會執行onpause -> onstop

當activity處於onstop狀態時, 這時候蓋住它的activity被關閉, 當前的actiivty就會被顯示出來: onrestart -> onstart -> onresume

當前activity開啟乙個介面, 被開啟的介面沒有完全的把前乙個介面蓋住, 前乙個介面的生命週期是: onresume -> onpause

當activity處於onpause狀態時, activity上面頁面被關閉了, 當前的activity被顯示了, 生命週期: onpause -> onresume

總結: 如果當前的activity處於onresume, 當前的activity可以直接和使用者互動.

應用場景: 在onpause中暫停的重新整理操作, 重新開啟.

如果當前的activity處於onpause, 當前的activity可以看見一部分, 但是不可以直接和使用者操作.

應用場景: 在此狀態可以停止一些頁面動態重新整理的狀態.

oncreate 介面剛開始建立時執行.

應用場景: 一些初始化操作放在這裡(載入控制項, 抓取資料)

ondestory 介面銷毀時執行.

應用場景:銷毀占用的資源. 釋放記憶體.

activity的啟動模式. 

1. "standard" (the default mode) 標準模式(activity預設的模式), 

當呼叫startactivity方法開啟介面, 會例項化多個例項在任務棧中, 相互不影響.

問題: 會在任務棧中例項化多個物件. 重複的太多. 容易記憶體溢位.

2. "singletop" 單頂部模式. 

如果被開啟的activity已經在任務棧的頂部, 這時候不會建立乙個新的例項, 而是呼叫棧頂activity的onnewintent方法.

如果當前任務棧中已經有被開啟的activity, 但是不在頂部, 這時候會建立乙個新的例項在任務棧中.

應用場景: 有些流氓程式設計師, 攻擊我們程式, 不停的開啟頁面, 就採用單頂部模式就可以解決.

3. "singletask" 單任務棧.

如果被開啟的activity已經存在任務棧中, 那呼叫startactivity方法開啟此頁面時, 不會再建立乙個新的例項, 呼叫onnewintent方法.

而是把當前的activity顯示出來(提到棧頂), 同時, 會把當前任務棧中activity以上的所有activity全部清除出棧.

如果說當前的activity已經在棧頂, 直接呼叫onnewintent方法.

應用場景: 一般應用在頁面載入非常龐大時, 非常消耗資源. 只想初始化一次就夠了, 以後不想再初始化例項, 就採用singletask模式.

4. "singleinstance". 單一例項.

如果被開啟的activity沒有例項化過物件, 呼叫startactivity開啟頁面時, 會建立乙個新的任務棧給activity使用, 

並且當前任務棧只有它自己存在, 其它的activity不會在此任務棧中建立新的例項.

如果被開啟的activity已經例項化過, 那麼會呼叫onnewintent方法.

在整個系統中, 無論哪乙個應用程式開啟當前採用singleinstance的activity, 

如果已經例項化過, 那麼始終都是呼叫的同乙個activity, 而且是在同乙個任務棧中.

應用場景: 需要常駐系統中的頁面採用這種方式.

android activity啟動模式

1.標準模式 standrad 沒啟動乙個activity,都會建立乙個activity例項,放入回退棧的內部 2.單頂模式 singletop 當啟動launchmode是 singletop的時候,系統會先判斷棧頂是不是要啟動的那個activity例項,如果是,則不會建立新的例項,直接讓棧頂直接...

Android Activity啟動模式

在androidmanifest.xml中配置 android name mainactivity android launchmode standard 有以下四種 standard 預設模式,每次通過intent啟動activity時都會建立乙個新的activity例項,並放入任務棧中。sing...

android Activity切換動畫

今天準備比賽的時候 遇到了這個問題。查了些資料總結了下。主要是通過 android theme 標籤來實現 android theme style 那麼就需要自己寫style風格檔案 如下 這裡之所以寫成2style個是為了解耦然後自己寫下anim anim enter anim anim exit...