亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android的activity學習筆記

2020-04-11 11:26:56
字體:
來源:轉載
供稿:網友

一、什么是activity

     Activity 是用戶接口程序,原則上它會提供給用戶一個交互式的接口功能。它是 android 應用程序的基本功能單元。Activity 本身是沒有界面的。所以activity類創建了一個窗口,開發人員可以通過setContentView(View)接口把UI放到activity創建的窗口上,當activity指向全屏窗口時,也可以用其他方式實現:作為漂浮窗口(通過windowIsFloating的主題集合),或者嵌入到其他的activity(使用ActivityGroup)。activity是單獨的,用于處理用戶操作。幾乎所有的activity都要和用戶打交道,

二、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();}

相信不少朋友也已經看過這個流程圖了,也基本了解了Activity生命周期的幾個過程,我們就來說一說這幾個過程。
1.啟動Activity:系統會先調用onCreate方法,然后調用onStart方法,最后調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居后臺:系統會先調用onPause方法,然后調用onStop方法,進入停滯狀態。
5.用戶后退回到此Activity:系統會先調用onRestart方法,然后調用onStart方法,最后調用onResume方法,再次進入運行狀態。
6.當前Activity處于被覆蓋狀態或者后臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而后用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.用戶退出當前Activity:系統先調用onPause方法,然后調用onStop方法,最后調用onDestory方法,結束當前Activity。
由圖可知:

  在一個Activity正常啟動過程中,這些方法調用的順序是onCreate -> onStart -> onResume;在Activity被kill掉的時候方法順序是onPause -> onStop -> onDestroy,此為一個完整的Lifecycle。那么對于中斷處理(比如電話來了),則是onPause -> onStop,恢復時onStart -> onResume;如果當前應用程序的是一個Theme為Translucent(半透明) 或者Dialog 的Activity那么中斷就是onPause ,恢復的時候onResume。

  那么對于”Other app need memory”,就是我們手機在運行一個應用程序的時候,有可能打進來電話發進來短信,或者沒有電了,這時候程序都會被中斷,優先去服務電話的基本功能,另外系統也不允許你占用太多資源,至少要保證一些功能(比如電話),所以資源不足的時候也就有可能被kill掉。

方法在系統中的作用及我們應該做什么:

  onCreate:在這里創建界面,做一些數據的初始化工作;

  onStart: 到這一步變成“用戶可見不可交互”的狀態;

  onResume:變成和用戶可交互的,(在Activity棧系統通過棧的方式管理這些Activity,即當前Activity在棧的最上端,運行完彈出棧,則回到上一個Activity);

  onPause:到這一步是可見但不可交互的,系統會停止動畫等消耗CPU的事情。從上文的描述已經知道,應該在這里保存你的一些數據,因為這個時候你的程序的優先級降低,有可能被系統收回。在這里保存的數據,應該在onResume里讀出來。

  onStop:變得不可見 ,被下一個activity覆蓋了

  onDestroy:這是Activity被kill前最后一個被調用方法了,可能是其他類調用finish方法或者是系統為了節省空間將它暫時性的干掉,可以用isFinishing()來判斷它,如果你有 一個Progress Dialog在線程中運行,請在onDestroy里把他cancel掉,不然等線程結束的時候,調用Dialog的cancel方法會拋異常。

onPause,onstop,onDestroy,三種狀態下 activity都有可能被系統kill 掉。

三、Activity之間的通信

  在 Android 中,不同的 Activity 實例可能運行在一個進程中,也可能運行在不同的進程中。因此我們需要一種特別的機制幫助我們在 Activity 之間傳遞消息。Android 中通過 Intent 對象來表示一條消息,一個 Intent 對象不僅包含有這個消息的目的地,還可以包含消息的內容,這好比一封 Email,其中不僅應該包含收件地址,還可以包含具體的內容。對于一個 Intent 對象,消息“目的地”是必須的,而內容則是可選項。

  Intent負責對操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,并完成組件的調用。因此,Intent在這里起著一個媒體中介的作用,專門提供組件互相調用的相關信息,實現調用者與被調用者之間的解耦。

  在應用中,我們可以以兩種形式來使用Intent:

  直接Intent:指定了component屬性的Intent(調用setComponent(ComponentName)或者setClass(Context, Class)來指定)。通過指定具體的組件類,通知應用啟動對應的組件。

  間接Intent:沒有指定comonent屬性的Intent。這些Intent需要包含足夠的信息,這樣系統才能根據這些信息,在在所有的可用組件中,確定滿足此Intent的組件。
      對于直接Intent,Android不需要去做解析,因為目標組件已經很明確。

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

四、Activity 的Intent Filter

  Intent Filter 描述了一個組件愿意接收什么樣的 Intent 對象,Android 將其抽象為 android.content.IntentFilter 類。在 Android 的 AndroidManifest.xml 配置文件中可以通過 <intent-filter >節點為一個 Activity 指定其 Intent Filter,以便告訴系統該 Activity 可以響應什么類型的 Intent。

  當使用 startActivity(intent) 來啟動另外一個 Activity 時,如果直接指定 intent 對象的 Component 屬性,那么 Activity Manager 將試圖啟動其 Component 屬性指定的 Activity。否則 Android 將通過 Intent 的其它屬性從安裝在系統中的所有 Activity 中查找與之最匹配的一個啟動,如果沒有找到合適的 Activity,應用程序會得到一個系統拋出的異常。這個匹配的過程如下:

五、Activity的棧式管理

  Android針對Activity的管理使用的是棧,就是說某一個時刻只有一個Activity處在棧頂,當這個Activity被銷毀后,下面的Activity才有可能浮到棧頂,或者有一個新的Activity被創建出來,則舊的Activity就被壓棧沉下去了。Activity是Android程序的表現層。程序的每一個顯示屏幕就是一個Activity。正在運行的Activity處在棧的最頂端,它是運行狀態的。

                    

當在程序中調用 Activity.finish()方法時,結果和用戶按下 BACK 鍵一樣:它告訴 Activity Manager該Activity實例可以被“回收”。隨后 Activity Manager 激活處于棧第二層的 Activity ,把原 Activity 壓入到棧的第二層,從 Running 狀態轉到 Paused 狀態。

六、Activity的加載模式

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

standard:就是intent將發送給新的實例,所以每次跳轉都會生成新的activity。

singleTop:也是發送新的實例,但不同standard的一點是,在請求的Activity正好位于棧頂時(配置成singleTop的Activity),不會構造新的實例

singleTask:和后面的singleInstance都只創建一個實例,當intent到來,需要創建設置為singleTask的Activity的時候,系統會檢查棧里面是否已經有該Activity的實例。如果有直接將intent發送給它。

singleInstance

首先說明一下task這個概念,Task可以認為是一個棧,可放入多個Activity。比如啟動一個應用,那么Android就創建了一個Task,然后啟動這個應用的入口Activity,那在它的界面上調用其他的Activity也只是在這個task里面。那如果在多個task中共享一個Activity的話怎么辦呢。舉個例來說,如果開啟一個導游服務類的應用程序,里面有個Activity是開啟GOOGLE地圖的,當按下home鍵退回到主菜單又啟動GOOGLE地圖的應用時,顯示的就是剛才的地圖,實際上是同一個Activity,實際上這就引入了singleInstance。singleInstance模式就是將該Activity單獨放入一個棧中,這樣這個棧中只有這一個Activity,不同應用的intent都由這個Activity接收和展示,這樣就做到了共享。當然前提是這些應用都沒有被銷毀,所以剛才是按下的HOME鍵,如果按下了返回鍵,則無效。

七、Activity的跳轉

Activity跳轉,無返回結果
   這是最簡單的Activity跳轉方式。從一個Activity啟動另一個Activity,直接startActivity(new Intent(當前Activity.this, 下一Activity.class))。
Activity跳轉,返回數據/結果
   需要返回數據或結果的,則使用startActivityForResult (Intent intent, int requestCode),requestCode的值是自定義的,用于識別跳轉的目標Activity。跳轉的目標Activity所要做的就是返回數據/結果,setResult(int resultCode)只返回結果不帶數據,或者setResult(int resultCode, Intent data)兩者都返回!而接收返回的數據/結果的處理函數是onActivityResult(int requestCode, int resultCode, Intent data),這里的requestCode就是startActivityForResult的requestCode,resultCode就是setResult里面的resultCode,返回的數據在data里面。
  ** 注意,在setResult后,要調用finish()銷毀當前的Activity,否則無法返回到原來的Activity,就無法執行原來Activity的onActivityResult函數,看到當前的Activity沒反應。

八、實例講解activity切換

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

怎么做呢?大體思路為:

    1.在Activity01中設置一個可觸發的空間,并添加一個觸發器

    2.在Activity01的觸發器添加listener

    3.在listener的接口實現中,設置一個Intent,讓這個Intent能夠將Activity01和Activity02綁定起來,并且通過putExtra將要傳輸的值放到Intent對象中存儲

    3.listener接口實現結尾,通過Activity01啟動調用這個Intent對象,通過調用來切換到Activity02

    4.在Activity02中,使用getIntent來獲取上下文切換中使得自己啟動了的那個Intent對象實例

    5.通過獲取到的intent對象實例,使用起getStringExtra來獲取先前putExtra的值.

    當然,后面如果對Intent更加了解時,就需要按實際情況挑選更合適的存儲數據及獲取數據的函數了.

以下是實現的演示:

最后附上關鍵部分代碼:

Activity01中:

button.setOnClickListener(new Button.OnClickListener() { //更準確點應該是View.OnClickListener public void onClick(View v) {  /* 新建一個Intent對象 */  Intent intent = new Intent();  intent.putExtra("name","LeiPei");   /* 指定intent要啟動的類 */  intent.setClass(Activity01.this, Activity02.class);  /* 啟動一個新的Activity */  Activity01.this.startActivity(intent);  /* 關閉當前的Activity */  Activity01.this.finish(); }});

Activity02中:  

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

以上就是小編整理的關于activity所涉及到的知識點,希望對大家的學習有所幫助,還有許多遺漏的知識,小編會繼續完善補充的,希望大家持續關注。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久伊人91精品综合网站| 日本高清视频精品| 国产亚洲精品成人av久久ww| 亚洲精品欧美一区二区三区| 91色琪琪电影亚洲精品久久| 欧美成人高清视频| 日本欧美黄网站| 欧美精品电影在线| 欧美国产中文字幕| 亚洲第一精品自拍| 亚洲人精选亚洲人成在线| 97国产成人精品视频| 在线免费观看羞羞视频一区二区| 伊人久久久久久久久久| 欧美视频中文字幕在线| 91精品91久久久久久| 亚洲色图第一页| 2019精品视频| 国产综合在线观看视频| 欧美大奶子在线| 欧美伊久线香蕉线新在线| www.99久久热国产日韩欧美.com| 亚洲国产成人精品久久久国产成人一区| 性夜试看影院91社区| 欧美激情在线播放| 久久亚洲一区二区三区四区五区高| 亚洲无限av看| 亚洲欧美激情精品一区二区| 亚洲a成v人在线观看| 国产精品美女久久久久久免费| 福利视频导航一区| 国产精品尤物福利片在线观看| 欧美成人四级hd版| 亚洲国产天堂久久综合| 国产精品96久久久久久又黄又硬| 精品久久香蕉国产线看观看gif| 日本19禁啪啪免费观看www| 日韩中文字幕在线免费观看| 日韩电影中文字幕av| 国产成人精品一区二区在线| 久久精品2019中文字幕| 国产成人精品久久亚洲高清不卡| 热re91久久精品国99热蜜臀| 26uuu另类亚洲欧美日本老年| 国产成人免费av电影| 欧美性少妇18aaaa视频| 国产日韩欧美综合| 精品国产一区二区三区四区在线观看| 国产成人精品视频| 亚洲欧美国产精品久久久久久久| 伊人精品在线观看| 九九久久国产精品| 欧洲亚洲妇女av| 欧美大肥婆大肥bbbbb| 国产成人+综合亚洲+天堂| 国产中文日韩欧美| 成人黄色片在线| 国产精品美女无圣光视频| 亚州国产精品久久久| 欧美在线观看日本一区| 性欧美长视频免费观看不卡| 亚洲aⅴ日韩av电影在线观看| 亚洲成人av片| 日本免费一区二区三区视频观看| 日韩高清a**址| 久久精品中文字幕一区| 国产日韩精品视频| 91夜夜揉人人捏人人添红杏| 欧美裸体xxxx极品少妇| 亚洲欧美日韩另类| 日韩av大片在线| 欧美日韩一区二区免费在线观看| 欧美成人免费在线视频| 国产女精品视频网站免费| 色悠悠国产精品| 亚洲欧美日韩图片| 久久久免费观看视频| 91高清视频免费| 欧美在线观看一区二区三区| 亚洲精品影视在线观看| 亚洲天堂av女优| 国产精品成人av在线| 久久久久久有精品国产| 欧美久久精品一级黑人c片| 国产精品极品在线| 91在线|亚洲| 亚洲欧洲日本专区| 日韩成人在线视频网站| 国产精品入口日韩视频大尺度| 国产精品aaaa| 精品久久久999| 国产日韩精品视频| 91在线视频九色| 狠狠躁18三区二区一区| 伊人av综合网| 国产一区二中文字幕在线看| 亚洲美女动态图120秒| 欧美性xxxx极品hd满灌| 91久久精品美女高潮| 免费av在线一区| 国产在线视频2019最新视频| 日本国产高清不卡| 欧美一级bbbbb性bbbb喷潮片| 欧美另类第一页| 亚洲va欧美va国产综合久久| 日韩一区视频在线| 欧美美女操人视频| xvideos国产精品| 狠狠躁夜夜躁人人爽天天天天97| 精品久久久av| 亚洲成人中文字幕| 欧美日韩亚洲精品一区二区三区| 热99久久精品| 欧美洲成人男女午夜视频| 国产精品亚洲第一区| 国产视频福利一区| 国产精品三级久久久久久电影| 亚洲成人在线视频播放| 在线看福利67194| 日韩免费视频在线观看| 久久综合久久八八| 亚洲在线观看视频网站| 欧美日韩在线视频一区二区| 久久精品国产成人精品| 久久在精品线影院精品国产| 成人做爰www免费看视频网站| 久久伊人色综合| 日韩欧美中文第一页| 北条麻妃久久精品| 国产视频在线一区二区| 国产91ⅴ在线精品免费观看| 日韩精品极品毛片系列视频| xxxx性欧美| www.亚洲天堂| 亚洲加勒比久久88色综合| 国产日韩欧美日韩| 欧美一区二区三区……| 欧美国产在线视频| 欧美成人一二三| 日av在线播放中文不卡| 欧美自拍视频在线观看| 亚洲护士老师的毛茸茸最新章节| 欧美激情视频在线观看| 国产99视频精品免视看7| 国产精品久久久av久久久| 欧美极品在线视频| 日本中文字幕成人| 亚洲大尺度美女在线| 中文字幕亚洲无线码a| 国产精品美女主播在线观看纯欲| 青青草国产精品一区二区| 国产精品欧美一区二区三区奶水| 成人黄色激情网| 欧美在线观看网站| 亚洲自拍偷拍区| 91精品啪在线观看麻豆免费| 国产不卡精品视男人的天堂| 国产成一区二区| 欧美精品在线播放| 久久成人综合视频| 日韩欧美在线播放| 日本国产高清不卡| 亚洲美女av网站| 欧美激情2020午夜免费观看|