Android學(xué)習(xí)筆記-Activity

  1. Activity的創(chuàng)建和配置

  • 要?jiǎng)?chuàng)建 Activity 可以繼承Activity類或者現(xiàn)有的子類,并且實(shí)現(xiàn)Acivity在其生命周期的各種狀態(tài)之間轉(zhuǎn)變時(shí)(例如創(chuàng)建 Activity、停止 Activity、恢復(fù) Activity 或銷毀 Activity 時(shí))系統(tǒng)調(diào)用的回調(diào)方法,必須實(shí)現(xiàn)onCreate()方法,必須在此方法內(nèi)調(diào)用 setContentView()來為Activity指定一個(gè)布局,比如setContentView(R.layout.my_activity);

  • 在配置Activity的時(shí)候一定要記得在AndroidManifest.xml中進(jìn)行注冊(cè)和配置,比如

<manifest ... >
  <application ... >
      <activity android:name=".MyActivity" />
      ...
  </application ... >
  ...
</manifest >

在Activity元素中,可以設(shè)置標(biāo)簽,圖標(biāo),風(fēng)格主題等,但是android:name標(biāo)簽是必須要指定一個(gè)類名,其中的. 表示該類在當(dāng)前程序所在的包下,如果該類不在當(dāng)前包下,則需要用完成的包名+類名

以下標(biāo)簽后的注釋僅供您參考下,畢竟英語水平有限,還有就是我還是個(gè)新手,對(duì)于以下標(biāo)簽的理解還不是很透徹,可能會(huì)誤導(dǎo)大家,所以具體的使用方法請(qǐng)參照官網(wǎng)相關(guān)API指南

<activity android:allowEmbedded=["true" | "false"] //
          android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:autoRemoveFromRecents=["true" | "false"]  //true 任務(wù)將會(huì)自動(dòng)的從overview screen中移除
          android:banner="drawable resource"
          android:clearTaskOnLaunch=["true" | "false"]  //個(gè)屬性用來標(biāo)記是否從task清除除根Activity之外的所有的Activity,“true”表示清除,“false”表示不清除,默認(rèn)為“false”。同樣,這個(gè)屬性也只對(duì)根Activity起作用,其他的Activity都會(huì)被忽略。 如果設(shè)置了這個(gè)屬性為“true”,每次用戶重新啟動(dòng)這個(gè)應(yīng)用時(shí),都只會(huì)看到根Activity,task中的其他Activity都會(huì)被清除出棧。如果我們的應(yīng)用中引用到了其他應(yīng)用的Activity,這些Activity設(shè)置了allowTaskReparenting屬性為“true”,則它們會(huì)被重新宿主到有共同affinity的task中。 每次home后,啟動(dòng)都會(huì)清除task中的其他activity。
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale",
                                 "uiMode", "orientation", "screenSize",
                                 "smallestScreenSize"]
          android:documentLaunchMode=["intoExisting" | "always" |
                                  "none" | "never"]
          android:enabled=["true" | "false"] //是否可以被實(shí)例化
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]  //Activity 是否能被其他程序的啟動(dòng),True 表示可以,false 表示只能被同一程序的組件或者擁有相同用戶簽名的程序啟動(dòng),默認(rèn)值取決于該Activity intent filters
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]  //是否開啟硬件加速
          android:icon="drawable resource"                       //程序的圖標(biāo)
          android:label="string resource"                       //Activity標(biāo)題顯示的文字
          android:launchMode=["multiple" | "singleTop" |
                              "singleTask" | "singleInstance"]//Activity的四種啟動(dòng)模式,默認(rèn)為standard
          android:maxRecents="integer" //設(shè)置該Activity在總覽屏幕(overview screen)的最大任務(wù)數(shù) 有效值介于1-50 默認(rèn)為16,低內(nèi)存設(shè)備上限為25
          android:multiprocess=["true" | "false"]
          android:name="string"  //Activity對(duì)應(yīng)的類名
          android:noHistory=["true" | "false"]  // true 表示當(dāng)用戶離開當(dāng)前Activity并且不在屏幕上顯示該Activity時(shí),會(huì)從堆棧中移除該Activity并且調(diào)用finish()銷毀.默認(rèn)值為false 當(dāng)為true時(shí) onActivityResult() 該方法將不會(huì)被調(diào)用
          android:parentActivityName="string"  //設(shè)置啟動(dòng)權(quán)限  可用來完成向上導(dǎo)航(Up navigation)
          android:permission="string" //權(quán)限
          android:process="string"
          android:relinquishTaskIdentity=["true" | "false"]
          android:screenOrientation=["unspecified" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "userLandscape" | "userPortrait" |
                                     "sensor" | "fullSensor" | "nosensor" |
                                     "user" | "fullUser" | "locked"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"  // Activity 的主題樣式
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>

2.Activity的啟動(dòng)和關(guān)閉

Activity兩種啟動(dòng)方式

  • startActivity(Intent intent)啟動(dòng)其他Activity
  • startActivityForResult(Intent intent ,int requestCode) Activity 將通過回調(diào)onActivityResult()方法得到新啟動(dòng)Activity的結(jié)果,requestCode參數(shù)代表啟動(dòng)Activity的請(qǐng)求碼

Activity 結(jié)束方式

  • finish()結(jié)束當(dāng)前Activity
  • finishActivity(int requestCode) 結(jié)束以startActivityForResult(Intent intent,int requestCode)方法啟動(dòng)的Activity

3.Activity的生命周期

在Activity的生命周期中主要有以下幾個(gè)方法

  • onCreate(Bundle savedStatus)創(chuàng)建Activity時(shí)調(diào)用
  • onStart()啟動(dòng)Activity時(shí)調(diào)用
  • onResume()恢復(fù)Activity時(shí)調(diào)用
  • onPause()暫停Activity時(shí)調(diào)用
  • onStop()停止Activity時(shí)調(diào)用
  • onDestroy()銷毀Activity時(shí)調(diào)用
  • onRestart()在活動(dòng)由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也就是活動(dòng)被重新啟動(dòng)了

Resumed:已恢復(fù)狀態(tài),此時(shí)Activity位于前臺(tái),并且獲得用戶焦點(diǎn)
pasued : 暫停狀態(tài), 其他Activity獲得用戶焦點(diǎn),但該Activity仍然可見,仍存在與內(nèi)存中
Stoped : 停止?fàn)顟B(tài),該Activity完全被其他Activity覆蓋,仍存在于內(nèi)存中,可隨時(shí)被系統(tǒng)殺死

activity_lifecycle

整個(gè)生命周期: 從onCreate()開始到onDestroy()結(jié)束
可見生命周期: 從onStart()onStop() 可以看到Activity在屏幕上,盡管有可能不在前臺(tái),不能和用戶交互,在這兩個(gè)方法之間,需要保持顯示給用戶的UI數(shù)據(jù)和資源等.
前臺(tái)生命周期: 從onResume()onPase() 該Activity處于所有Activity的最前面,和用戶交互.

4.Activity的啟動(dòng)模式

android:launchMode=["multiple" | "singleTop" |
                  "singleTask" | "singleInstance"]//Activity的四種啟動(dòng)模式,默認(rèn)為standard
  • standard: 在standard模式下,每當(dāng)啟動(dòng)一個(gè)新的活動(dòng),它就會(huì)在返回棧中入棧,并處棧頂?shù)奈恢谩?duì)于使用standard模式的活動(dòng),系統(tǒng)不會(huì)在乎這個(gè)活動(dòng)是否已經(jīng)在返回棧中存在每次啟動(dòng)都會(huì)創(chuàng)建新的實(shí)例,Activity 可以多次實(shí)例化,而每個(gè)實(shí)例均可屬于不同的任務(wù),并且一個(gè)任務(wù)可以擁有多個(gè)實(shí)例。
  • singleTop :該模式下在啟動(dòng)活動(dòng)時(shí)如果發(fā)現(xiàn)返回棧的棧頂已經(jīng)是該活動(dòng)時(shí),則認(rèn)為可以直接使用它,不會(huì)再創(chuàng)建新的活動(dòng)實(shí)例,如果不在棧頂則會(huì)創(chuàng)建新的實(shí)例。Activity 可以多次實(shí)例化,而每個(gè)實(shí)例均可屬于不同的任務(wù),并且一個(gè)任務(wù)可以擁有多個(gè)實(shí)例(但前提是位于返回棧頂部的 Activity 并不是 Activity 的現(xiàn)有實(shí)例)
  • singleTask :每次啟動(dòng)該活動(dòng)時(shí)系統(tǒng)首先在返回棧中檢測(cè)是否存在該活動(dòng)的實(shí)例,如果已經(jīng)存在則會(huì)直接使用該實(shí)例,并把在這個(gè)活動(dòng)之上的所有活動(dòng)統(tǒng)統(tǒng)出棧,在如果沒有則會(huì)創(chuàng)建一個(gè)新的活動(dòng)實(shí)例
  • singleInstance :會(huì)啟用一個(gè)新的返回棧來管理這個(gè)活動(dòng)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,208評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,477評(píng)論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,960評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,200評(píng)論 0 288
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,726評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,617評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,807評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,049評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評(píng)論 1 281
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,432評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,769評(píng)論 2 372

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,608評(píng)論 25 708
  • Activity https://developer.android.com/guide/components/a...
    XLsn0w閱讀 712評(píng)論 0 4
  • 轉(zhuǎn)載注明出處:http://www.lxweimin.com/p/c2c2ee4eb48a 1. 簡(jiǎn)介 本篇不針對(duì)于...
    王三的貓阿德閱讀 2,286評(píng)論 2 5
  • 近十年來,我從來沒有像現(xiàn)在這樣想念過,一大一小兩個(gè)人在我腦海里不停的奔跑。睡在賓館的大床上,常常因?yàn)樯焓置坏侥莻€(gè)...
    奔跑的加菲貓閱讀 182評(píng)論 0 0
  • 日子真的不能過的太安逸。這是很多雞湯文的開篇語。 而我寫這句話,只是針對(duì)今日與朋友的對(duì)話收獲做個(gè)筆記性總結(jié)。 我相...
    麥子的背包閱讀 407評(píng)論 2 3