亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android的activity學(xué)習(xí)筆記

 更新時(shí)間:2015年09月06日 10:36:50   投稿:lijiao  
這篇文章主要整理了Android的activity學(xué)習(xí)筆記,總共有八大亮點(diǎn),推薦給大家,需要的朋友可以參考下

一、什么是activity

     Activity 是用戶(hù)接口程序,原則上它會(huì)提供給用戶(hù)一個(gè)交互式的接口功能。它是 android 應(yīng)用程序的基本功能單元。Activity 本身是沒(méi)有界面的。所以activity類(lèi)創(chuàng)建了一個(gè)窗口,開(kāi)發(fā)人員可以通過(guò)setContentView(View)接口把UI放到activity創(chuàng)建的窗口上,當(dāng)activity指向全屏窗口時(shí),也可以用其他方式實(shí)現(xiàn):作為漂浮窗口(通過(guò)windowIsFloating的主題集合),或者嵌入到其他的activity(使用ActivityGroup)。activity是單獨(dú)的,用于處理用戶(hù)操作。幾乎所有的activity都要和用戶(hù)打交道,

二、activity生命周期

  

public class Activity extends ApplicationContext {

protected void onCreate(Bundle savedInstanceState);
 
protected void onStart();
 
protected void onRestart();
 
protected void onResume();
 
protected void onPause();
 
protected void onStop();
 
protected void onDestroy();

}

相信不少朋友也已經(jīng)看過(guò)這個(gè)流程圖了,也基本了解了Activity生命周期的幾個(gè)過(guò)程,我們就來(lái)說(shuō)一說(shuō)這幾個(gè)過(guò)程。
1.啟動(dòng)Activity:系統(tǒng)會(huì)先調(diào)用onCreate方法,然后調(diào)用onStart方法,最后調(diào)用onResume,Activity進(jìn)入運(yùn)行狀態(tài)。
2.當(dāng)前Activity被其他Activity覆蓋其上或被鎖屏:系統(tǒng)會(huì)調(diào)用onPause方法,暫停當(dāng)前Activity的執(zhí)行。
3.當(dāng)前Activity由被覆蓋狀態(tài)回到前臺(tái)或解鎖屏:系統(tǒng)會(huì)調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)。
4.當(dāng)前Activity轉(zhuǎn)到新的Activity界面或按Home鍵回到主屏,自身退居后臺(tái):系統(tǒng)會(huì)先調(diào)用onPause方法,然后調(diào)用onStop方法,進(jìn)入停滯狀態(tài)。
5.用戶(hù)后退回到此Activity:系統(tǒng)會(huì)先調(diào)用onRestart方法,然后調(diào)用onStart方法,最后調(diào)用onResume方法,再次進(jìn)入運(yùn)行狀態(tài)。
6.當(dāng)前Activity處于被覆蓋狀態(tài)或者后臺(tái)不可見(jiàn)狀態(tài),即第2步和第4步,系統(tǒng)內(nèi)存不足,殺死當(dāng)前Activity,而后用戶(hù)退回當(dāng)前Activity:再次調(diào)用onCreate方法、onStart方法、onResume方法,進(jìn)入運(yùn)行狀態(tài)。
7.用戶(hù)退出當(dāng)前Activity:系統(tǒng)先調(diào)用onPause方法,然后調(diào)用onStop方法,最后調(diào)用onDestory方法,結(jié)束當(dāng)前Activity。
由圖可知:

  在一個(gè)Activity正常啟動(dòng)過(guò)程中,這些方法調(diào)用的順序是onCreate -> onStart -> onResume;在Activity被kill掉的時(shí)候方法順序是onPause -> onStop -> onDestroy,此為一個(gè)完整的Lifecycle。那么對(duì)于中斷處理(比如電話(huà)來(lái)了),則是onPause -> onStop,恢復(fù)時(shí)onStart -> onResume;如果當(dāng)前應(yīng)用程序的是一個(gè)Theme為T(mén)ranslucent(半透明) 或者Dialog 的Activity那么中斷就是onPause ,恢復(fù)的時(shí)候onResume。

  那么對(duì)于”O(jiān)ther app need memory”,就是我們手機(jī)在運(yùn)行一個(gè)應(yīng)用程序的時(shí)候,有可能打進(jìn)來(lái)電話(huà)發(fā)進(jìn)來(lái)短信,或者沒(méi)有電了,這時(shí)候程序都會(huì)被中斷,優(yōu)先去服務(wù)電話(huà)的基本功能,另外系統(tǒng)也不允許你占用太多資源,至少要保證一些功能(比如電話(huà)),所以資源不足的時(shí)候也就有可能被kill掉。

方法在系統(tǒng)中的作用及我們應(yīng)該做什么:

  onCreate:在這里創(chuàng)建界面,做一些數(shù)據(jù)的初始化工作;

  onStart: 到這一步變成“用戶(hù)可見(jiàn)不可交互”的狀態(tài);

  onResume:變成和用戶(hù)可交互的,(在Activity棧系統(tǒng)通過(guò)棧的方式管理這些Activity,即當(dāng)前Activity在棧的最上端,運(yùn)行完彈出棧,則回到上一個(gè)Activity);

  onPause:到這一步是可見(jiàn)但不可交互的,系統(tǒng)會(huì)停止動(dòng)畫(huà)等消耗CPU的事情。從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候你的程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在onResume里讀出來(lái)。

  onStop:變得不可見(jiàn) ,被下一個(gè)activity覆蓋了

  onDestroy:這是Activity被kill前最后一個(gè)被調(diào)用方法了,可能是其他類(lèi)調(diào)用finish方法或者是系統(tǒng)為了節(jié)省空間將它暫時(shí)性的干掉,可以用isFinishing()來(lái)判斷它,如果你有 一個(gè)Progress Dialog在線(xiàn)程中運(yùn)行,請(qǐng)?jiān)趏nDestroy里把他cancel掉,不然等線(xiàn)程結(jié)束的時(shí)候,調(diào)用Dialog的cancel方法會(huì)拋異常。

onPause,onstop,onDestroy,三種狀態(tài)下 activity都有可能被系統(tǒng)kill 掉。

三、Activity之間的通信

  在 Android 中,不同的 Activity 實(shí)例可能運(yùn)行在一個(gè)進(jìn)程中,也可能運(yùn)行在不同的進(jìn)程中。因此我們需要一種特別的機(jī)制幫助我們?cè)?Activity 之間傳遞消息。Android 中通過(guò) Intent 對(duì)象來(lái)表示一條消息,一個(gè) Intent 對(duì)象不僅包含有這個(gè)消息的目的地,還可以包含消息的內(nèi)容,這好比一封 Email,其中不僅應(yīng)該包含收件地址,還可以包含具體的內(nèi)容。對(duì)于一個(gè) Intent 對(duì)象,消息“目的地”是必須的,而內(nèi)容則是可選項(xiàng)。

  Intent負(fù)責(zé)對(duì)操作的動(dòng)作、動(dòng)作涉及數(shù)據(jù)、附加數(shù)據(jù)進(jìn)行描述,Android則根據(jù)此Intent的描述,負(fù)責(zé)找到對(duì)應(yīng)的組件,將 Intent傳遞給調(diào)用的組件,并完成組件的調(diào)用。因此,Intent在這里起著一個(gè)媒體中介的作用,專(zhuān)門(mén)提供組件互相調(diào)用的相關(guān)信息,實(shí)現(xiàn)調(diào)用者與被調(diào)用者之間的解耦。

  在應(yīng)用中,我們可以以?xún)煞N形式來(lái)使用Intent:

  直接Intent:指定了component屬性的Intent(調(diào)用setComponent(ComponentName)或者setClass(Context, Class)來(lái)指定)。通過(guò)指定具體的組件類(lèi),通知應(yīng)用啟動(dòng)對(duì)應(yīng)的組件。

  間接Intent:沒(méi)有指定comonent屬性的Intent。這些Intent需要包含足夠的信息,這樣系統(tǒng)才能根據(jù)這些信息,在在所有的可用組件中,確定滿(mǎn)足此Intent的組件。
      對(duì)于直接Intent,Android不需要去做解析,因?yàn)槟繕?biāo)組件已經(jīng)很明確。

  Android需要解析的是那些間接Intent,通過(guò)解析,將 Intent映射給可以處理此Intent的Activity、IntentReceiver或Service。Intent解析機(jī)制主要是通過(guò)查找已注冊(cè)在AndroidManifest.xml中的所有IntentFilter及其中定義的Intent,最終找到匹配的Intent。

四、Activity 的Intent Filter

  Intent Filter 描述了一個(gè)組件愿意接收什么樣的 Intent 對(duì)象,Android 將其抽象為 android.content.IntentFilter 類(lèi)。在 Android 的 AndroidManifest.xml 配置文件中可以通過(guò) <intent-filter >節(jié)點(diǎn)為一個(gè) Activity 指定其 Intent Filter,以便告訴系統(tǒng)該 Activity 可以響應(yīng)什么類(lèi)型的 Intent。

  當(dāng)使用 startActivity(intent) 來(lái)啟動(dòng)另外一個(gè) Activity 時(shí),如果直接指定 intent 對(duì)象的 Component 屬性,那么 Activity Manager 將試圖啟動(dòng)其 Component 屬性指定的 Activity。否則 Android 將通過(guò) Intent 的其它屬性從安裝在系統(tǒng)中的所有 Activity 中查找與之最匹配的一個(gè)啟動(dòng),如果沒(méi)有找到合適的 Activity,應(yīng)用程序會(huì)得到一個(gè)系統(tǒng)拋出的異常。這個(gè)匹配的過(guò)程如下:

五、Activity的棧式管理

  Android針對(duì)Activity的管理使用的是棧,就是說(shuō)某一個(gè)時(shí)刻只有一個(gè)Activity處在棧頂,當(dāng)這個(gè)Activity被銷(xiāo)毀后,下面的Activity才有可能浮到棧頂,或者有一個(gè)新的Activity被創(chuàng)建出來(lái),則舊的Activity就被壓棧沉下去了。Activity是Android程序的表現(xiàn)層。程序的每一個(gè)顯示屏幕就是一個(gè)Activity。正在運(yùn)行的Activity處在棧的最頂端,它是運(yùn)行狀態(tài)的。

                    

當(dāng)在程序中調(diào)用 Activity.finish()方法時(shí),結(jié)果和用戶(hù)按下 BACK 鍵一樣:它告訴 Activity Manager該Activity實(shí)例可以被“回收”。隨后 Activity Manager 激活處于棧第二層的 Activity ,把原 Activity 壓入到棧的第二層,從 Running 狀態(tài)轉(zhuǎn)到 Paused 狀態(tài)。

六、Activity的加載模式

standard、singleTop、singleTask、singleInstance(其中前兩個(gè)是一組、后兩個(gè)是一組),默認(rèn)為standard

standard:就是intent將發(fā)送給新的實(shí)例,所以每次跳轉(zhuǎn)都會(huì)生成新的activity。

singleTop:也是發(fā)送新的實(shí)例,但不同standard的一點(diǎn)是,在請(qǐng)求的Activity正好位于棧頂時(shí)(配置成singleTop的Activity),不會(huì)構(gòu)造新的實(shí)例

singleTask:和后面的singleInstance都只創(chuàng)建一個(gè)實(shí)例,當(dāng)intent到來(lái),需要?jiǎng)?chuàng)建設(shè)置為singleTask的Activity的時(shí)候,系統(tǒng)會(huì)檢查棧里面是否已經(jīng)有該Activity的實(shí)例。如果有直接將intent發(fā)送給它。

singleInstance

首先說(shuō)明一下task這個(gè)概念,Task可以認(rèn)為是一個(gè)棧,可放入多個(gè)Activity。比如啟動(dòng)一個(gè)應(yīng)用,那么Android就創(chuàng)建了一個(gè)Task,然后啟動(dòng)這個(gè)應(yīng)用的入口Activity,那在它的界面上調(diào)用其他的Activity也只是在這個(gè)task里面。那如果在多個(gè)task中共享一個(gè)Activity的話(huà)怎么辦呢。舉個(gè)例來(lái)說(shuō),如果開(kāi)啟一個(gè)導(dǎo)游服務(wù)類(lèi)的應(yīng)用程序,里面有個(gè)Activity是開(kāi)啟GOOGLE地圖的,當(dāng)按下home鍵退回到主菜單又啟動(dòng)GOOGLE地圖的應(yīng)用時(shí),顯示的就是剛才的地圖,實(shí)際上是同一個(gè)Activity,實(shí)際上這就引入了singleInstance。singleInstance模式就是將該Activity單獨(dú)放入一個(gè)棧中,這樣這個(gè)棧中只有這一個(gè)Activity,不同應(yīng)用的intent都由這個(gè)Activity接收和展示,這樣就做到了共享。當(dāng)然前提是這些應(yīng)用都沒(méi)有被銷(xiāo)毀,所以剛才是按下的HOME鍵,如果按下了返回鍵,則無(wú)效。

七、Activity的跳轉(zhuǎn)

Activity跳轉(zhuǎn),無(wú)返回結(jié)果
   這是最簡(jiǎn)單的Activity跳轉(zhuǎn)方式。從一個(gè)Activity啟動(dòng)另一個(gè)Activity,直接startActivity(new Intent(當(dāng)前Activity.this, 下一Activity.class))。
Activity跳轉(zhuǎn),返回?cái)?shù)據(jù)/結(jié)果
   需要返回?cái)?shù)據(jù)或結(jié)果的,則使用startActivityForResult (Intent intent, int requestCode),requestCode的值是自定義的,用于識(shí)別跳轉(zhuǎn)的目標(biāo)Activity。跳轉(zhuǎn)的目標(biāo)Activity所要做的就是返回?cái)?shù)據(jù)/結(jié)果,setResult(int resultCode)只返回結(jié)果不帶數(shù)據(jù),或者setResult(int resultCode, Intent data)兩者都返回!而接收返回的數(shù)據(jù)/結(jié)果的處理函數(shù)是onActivityResult(int requestCode, int resultCode, Intent data),這里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的數(shù)據(jù)在data里面。
  ** 注意,在setResult后,要調(diào)用finish()銷(xiāo)毀當(dāng)前的Activity,否則無(wú)法返回到原來(lái)的Activity,就無(wú)法執(zhí)行原來(lái)Activity的onActivityResult函數(shù),看到當(dāng)前的Activity沒(méi)反應(yīng)。

八、實(shí)例講解activity切換

android中每個(gè)activity通常描述了一個(gè)屏幕上的所有畫(huà)面(窗口級(jí)別的activity除外),因此通常手機(jī)屏幕兩個(gè)界面(準(zhǔn)確些說(shuō)是整個(gè)屏幕)之間的切換就涉及到了activity的切換.
假定有兩個(gè)activity,分別是Activity01和Activity02,現(xiàn)在Activity01頁(yè)面中有一個(gè)按鈕,點(diǎn)下之后會(huì)切換到Activity02.并且在Activity切換時(shí),Activity01給Activity02傳遞了一個(gè)參數(shù). (intent可以在切換Activity時(shí)使用,且能傳遞數(shù)據(jù).)

怎么做呢?大體思路為:

    1.在Activity01中設(shè)置一個(gè)可觸發(fā)的空間,并添加一個(gè)觸發(fā)器

    2.在Activity01的觸發(fā)器添加listener

    3.在listener的接口實(shí)現(xiàn)中,設(shè)置一個(gè)Intent,讓這個(gè)Intent能夠?qū)ctivity01和Activity02綁定起來(lái),并且通過(guò)putExtra將要傳輸?shù)闹捣诺絀ntent對(duì)象中存儲(chǔ)

    3.listener接口實(shí)現(xiàn)結(jié)尾,通過(guò)Activity01啟動(dòng)調(diào)用這個(gè)Intent對(duì)象,通過(guò)調(diào)用來(lái)切換到Activity02

    4.在Activity02中,使用getIntent來(lái)獲取上下文切換中使得自己?jiǎn)?dòng)了的那個(gè)Intent對(duì)象實(shí)例

    5.通過(guò)獲取到的intent對(duì)象實(shí)例,使用起getStringExtra來(lái)獲取先前putExtra的值.

    當(dāng)然,后面如果對(duì)Intent更加了解時(shí),就需要按實(shí)際情況挑選更合適的存儲(chǔ)數(shù)據(jù)及獲取數(shù)據(jù)的函數(shù)了.

以下是實(shí)現(xiàn)的演示:

最后附上關(guān)鍵部分代碼:

Activity01中:

button.setOnClickListener(new Button.OnClickListener() { //更準(zhǔn)確點(diǎn)應(yīng)該是View.OnClickListener
 public void onClick(View v)
 {
  /* 新建一個(gè)Intent對(duì)象 */
  Intent intent = new Intent();
  intent.putExtra("name","LeiPei"); 
  /* 指定intent要啟動(dòng)的類(lèi) */
  intent.setClass(Activity01.this, Activity02.class);
  /* 啟動(dòng)一個(gè)新的Activity */
  Activity01.this.startActivity(intent);
  /* 關(guān)閉當(dāng)前的Activity */
  Activity01.this.finish();
 }
});

Activity02中:  

 String name=intent.getStringExtra("name");
 textview2.setText("activity01傳過(guò)來(lái)的值為:"+name);

以上就是小編整理的關(guān)于activity所涉及到的知識(shí)點(diǎn),希望對(duì)大家的學(xué)習(xí)有所幫助,還有許多遺漏的知識(shí),小編會(huì)繼續(xù)完善補(bǔ)充的,希望大家持續(xù)關(guān)注。

相關(guān)文章

最新評(píng)論