Android四大組件-activity

七月中旬正式進(jìn)入公司,八月初正式開始接觸android竞慢。三個多月以來筹煮,一直沒些什么東西,這一篇是首秀败潦,后面還會陸續(xù)寫一些 。對自己了解到的一些東西做一下總結(jié)檬洞。下面進(jìn)入正題沟饥,Android有四大組件:activity、service广料、content provider和broadcast幼驶。今天先來說說activity。

活動主要用于用戶交互糜颠,它最容易吸引到用戶,可以包含用戶界面的組件顶瞒,也可以只在里面添加邏輯元旬。一個App里面可以包含一個或者多個activity,不包含任何activity的應(yīng)用基本沒有坑资。

activity包括它的創(chuàng)建穆端,布局構(gòu)造,多個活動之間的交互攒巍,生命周期等等荒勇。activity的創(chuàng)建要根據(jù)開發(fā)平臺來處理,eclipse和android studio的創(chuàng)建方法類似兢孝,屬于基本操作仅偎。創(chuàng)建完成一個activity之后,系統(tǒng)會自動生成一個layout文件(用于調(diào)整這個activity的布局)并且在Androidmanifest中注冊這個活動(平臺一般會自動生成):

package="com.example.activity"

<application

android:allowBackup=="true"

android:icon="@mipmap/ic_lunch"

android:lable="@string/app_name" ? ? ? ? ? ? ? ? ??

android:supportRtl="true"

android:theme="@style/AppTheme" ? ? ? ? ? ? ? ? ??

<activity android:name=".FirstActivity"></activity>

allowbackup:是否允許返回 ? ? ? ? ? ? ? ?icon:圖標(biāo) ? ? ? ? ? ? ? ? lable:標(biāo)題欄的內(nèi)容

theme:頁面風(fēng)格窗轩,后面toolbar的時候會用到這個東西威恼。

name:活動名稱

在activity的主界面會自動重寫onCreate這個方法箫措,這個方法里面添加要在頁面上的顯示的內(nèi)容邏輯衬潦。除了onCreate之外還有onStart、onResume镀岛、onPause、onStop驾锰,onDestory、onRestart耻瑟。

onCreate:在活動第一次創(chuàng)建的時候調(diào)用赏酥,加載布局裸扶,綁定事件。

onStart:每次活動由不見變?yōu)榭梢姷氖菚r候調(diào)用呵晨。

onResume:在活動準(zhǔn)備好與用戶進(jìn)行交互的時候調(diào)用,此時活動位于返回棧的棧頂何荚。

onPause:在系統(tǒng)準(zhǔn)備去啟動或者恢復(fù)另一個活動的時候調(diào)用,在此過程中將消耗cpu的資源釋放掉妥衣,且速度要快

onStop:活動完全不可見時調(diào)用戒傻。

onDestory:活動被銷毀前調(diào)用,之后變?yōu)殇N毀態(tài)芦倒。

onRestart:由停止態(tài)轉(zhuǎn)換為運行狀態(tài)之前調(diào)用不翩。

上面的順序也是一個活動的生命周期口蝠。onStart可以添加影響app界面狀態(tài)的接口調(diào)用邏輯。onResume里面添加界面的刷新相關(guān)的邏輯妙蔗。活動的生命周期是一個返回棧的結(jié)構(gòu)昙啄。主要有四個狀態(tài):

運行態(tài):活動位于棧頂時梳凛,就是運行態(tài)

暫停狀態(tài):活動不在棧頂,但仍然可見

停止態(tài):活動不在棧頂且不可見韧拒,系統(tǒng)會為它保留相應(yīng)狀態(tài)和成員變量叭莫,但空間不足時,系統(tǒng)會將其回收雇初。

銷毀態(tài):活動從返回棧移除時靖诗,就處于銷毀態(tài),可以保證內(nèi)存充足刊橘。

完整生存期促绵。活動在onCreate()方法和 onDestroy()方法之間所經(jīng)歷的浓冒,就是完整生存期尖坤。一般情況下,一個活動會在 onCreate()方法中完成各種初始化操作场梆,而在onDestroy()方法中完成釋放內(nèi)存的操作纯路。

可見生存期:活動在 onStart()方法和 onStop()方法之間所經(jīng)歷的,就是可見生存期装哆。在可見生存期內(nèi)定嗓,活動對于用戶總是可見的,即便有可能無法和用戶進(jìn)行交互凌简。我們可以通過這兩個方法恃逻,合理地管理那些對用戶可見的資源。比如在 onStart()方法中對資源進(jìn)行加載凸郑,而在 onStop()方法中對資源進(jìn)行釋放矛市,從而保證處于停止?fàn)顟B(tài)的活動不會占用過多內(nèi)存。

前臺生存期而昨≌姨铮活動在 onResume()方法和 onPause()方法之間所經(jīng)歷的就是前臺生存期墩衙。在前臺生存期內(nèi),活動總是處于運行狀態(tài)的植袍,此時的活動是可以和用戶進(jìn)行交互的籽懦,我們平時看到和接觸最多的也就是這個狀態(tài)下的活動。


Intent用于一個活動喚醒另一個活動:

顯式調(diào)用

Intent intent =new Intent(FirstActivity.this,SecondActivity.class);

startActivity(intent);

隱式調(diào)用:

<action android:name="com.example.activitytest.ACTION_START"/>

<category android:name="com.intent.category.DEFAULT"/>

Intent intent = new Intent("com.example.activitytest.ACTION_START");

startActivity(intent);

在系統(tǒng)調(diào)用startActivity的時候會自動把android.Intent.category加到Intent里面去厅篓。必須action和category都匹配上才可以啟動相對應(yīng)的活動捶码。

關(guān)于Intent intent=new Intent(Intent.ACTION_VIEW);

Intent.setData(Uri.prase("+網(wǎng)址"))

先指定Intent的action是ACTION_VIEW這是一個內(nèi)置的常量惫恼,后面setData來調(diào)用資源,把網(wǎng)址解析成uri傳進(jìn)去令宿。相對應(yīng)的可以在<intent_filter>這里添加標(biāo)簽,詳細(xì)說明是什么類型的數(shù)據(jù)筛婉。數(shù)據(jù)類型有:http癞松、host、part硕勿、path枫甲、mimetype。寫法如下

<data android:scheme="http"/>

打電話软能,打開另一個app都可以通過類似的方式實現(xiàn)举畸。

接下來就是Intent來傳遞數(shù)據(jù)了

A頁面:

Intent intent=new Intent(Firstactivity.this,secondactivity.class);

intent.putextrra=("extra——data",data); ? ?//第一個參數(shù)是鍵,第二個是帶著內(nèi)容的參數(shù)跋核。

B接受頁面:

Intent intent=getIntent();

String data=intent.getStringExtra("extra_data");

這時候data就讀取到了前一個頁面的信息data了叛买。

返回數(shù)據(jù)給前一個activity:

A頁面:startActivityForResult(intent率挣,1);

B頁面:Intent intent =new Intent ;

intent.putExtra=("data_extra","hello");

setResult(RESULT_OK,intent);

finish;


最后來說一說Activity的啟動模式:

standard 是活動默認(rèn)的啟動模式捶箱,在不進(jìn)行顯式指定的情況下动漾,所有活動都會自動使用這種啟動模式。因此晨川,到目前為止我們寫過的所有活動都是使用的 standard 模式。經(jīng)過上一節(jié)的學(xué)習(xí)愧怜,你已經(jīng)知道了 Android 是使用返回棧來管理活動的看蚜,在 standard 模式(即默認(rèn)情況)下供炎,每當(dāng)啟動一個新的活動疾党,它就會在返回棧中入棧,并處于棧頂?shù)奈恢媒叨邸τ谑褂?standard 模式的活動雹洗,系統(tǒng)不會在乎這個活動是否已經(jīng)在返回棧中存在时肿,每次啟動都會創(chuàng)建該活動的一個新的實例。

singleTop可能在有些情況下螃成,你會覺得 standard 模式不太合理寸宏。活動明明已經(jīng)在棧頂了羔巢,為什么再次啟動的時候還要創(chuàng)建一個新的活動實例呢罩阵?別著急,這只是系統(tǒng)默認(rèn)的一種啟動模式而已袍辞,你完全可以根據(jù)自己的需要進(jìn)行修改常摧,比如說使用 singleTop 模式。當(dāng)活動的啟動模式指定為singleTop谎懦,在啟動活動時如果發(fā)現(xiàn)返回棧的棧頂已經(jīng)是該活動界拦,則認(rèn)為可以直接使用它,不會再創(chuàng)建新的活動實例截碴。

singleTask使用 singleTop 模式可以很好地解決重復(fù)創(chuàng)建棧頂活動的問題蛉威,但是正如你在上一節(jié)所看到的,如果該活動并沒有處于棧頂?shù)奈恢谜芟海€是可能會創(chuàng)建多個活動實例的择示。那么有沒有什么辦法可以讓某個活動在整個應(yīng)用程序的上下文中只存在一個實例呢栅盲?這就要借助 singleTask 模式來實現(xiàn)了。當(dāng)活動的啟動模式指定為 singleTask摩瞎,每次啟動該活動時系統(tǒng)首先會在返回棧中檢查是否存在該活動的實例孝常,如果發(fā)現(xiàn)已經(jīng)存在則直接使用該實例,并把在這個活動之上的所有活動統(tǒng)統(tǒng)出棧上渴,如果沒有發(fā)現(xiàn)就會創(chuàng)建一個新的活動實例喜颁。

singleInstance 模式應(yīng)該算是 4 種啟動模式中最特殊也最復(fù)雜的一個了半开,你也需要多花點功夫來理解這個模式。不同于以上 3 種啟動模式奢米,指定為 singleInstance 模式的活動會啟用一個新的返回棧,在每一次啟動頁面的時候會調(diào)用這個回棧來管理這個活動(其實如果 singleTask 模式指定了不同的 taskAffinity谒拴,也會啟動一個新的返回棧涉波。后面會詳細(xì)來說一說activity的啟動模式。

第一篇暫時就這樣吧啤覆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苍日,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子城侧,更是在濱河造成了極大的恐慌易遣,老刑警劉巖彼妻,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫌佑,死亡現(xiàn)場離奇詭異,居然都是意外死亡侨歉,警方通過查閱死者的電腦和手機(jī)屋摇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽邓,“玉大人,你說我怎么就攤上這事牵舵∑馄。” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵畸颅,是天一觀的道長担巩。 經(jīng)常有香客問我,道長没炒,這世上最難降的妖魔是什么涛癌? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮送火,結(jié)果婚禮上拳话,老公的妹妹穿的比我還像新娘。我一直安慰自己种吸,他們只是感情好弃衍,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坚俗,像睡著了一般笨鸡。 火紅的嫁衣襯著肌膚如雪姜钳。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天形耗,我揣著相機(jī)與錄音哥桥,去河邊找鬼。 笑死激涤,一個胖子當(dāng)著我的面吹牛拟糕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播倦踢,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼送滞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辱挥?” 一聲冷哼從身側(cè)響起犁嗅,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晤碘,沒想到半個月后褂微,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡园爷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年宠蚂,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片童社。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡求厕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出扰楼,到底是詐尸還是另有隱情呀癣,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布弦赖,位于F島的核電站项栏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腾节。R本人自食惡果不足惜忘嫉,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望案腺。 院中可真熱鬧庆冕,春花似錦、人聲如沸劈榨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽同辣。三九已至拷姿,卻和暖如春惭载,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响巢。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工描滔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人踪古。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓含长,卻偏偏與公主長得像,于是被迫代替她去往敵國和親伏穆。 傳聞我的和親對象是個殘疾皇子拘泞,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,863評論 25 707
  • 關(guān)于為什么要寫屬于自己的博客,我在前一篇文章中也提到了枕扫。主要是歸納自己這一個時期所學(xué)到的知識陪腌,幫助自己更好的理解,...
    Kevin_Jern閱讀 886評論 0 9
  • 本文主要搜集記錄一下Android開發(fā)的四大組件:一烟瞧、Activity詳解二诗鸭、Service詳解三、Broadca...
    AFinalStone閱讀 592評論 0 2
  • 我竟然做了一個關(guān)于hero的夢燕刻,很久沒聯(lián)系只泼,我跑到了他家剖笙?沒鑰匙卵洗,怎么進(jìn)去的。他在臥室關(guān)門睡覺弥咪,我在客廳找有關(guān)我...
    這里Cc閱讀 190評論 0 0
  • 高校能人士的7個習(xí)慣(上) 積極主動 這個社會有很多積極主動的人們过蹂,也有只說不做的人們,每個人看到的情況都不同聚至,理...
    這一刻我在乎閱讀 181評論 0 0