定義:
Android四大組件之一,提供界面和用戶交互(如滑動抬闯、點(diǎn)擊等)
說明:
首先必須在AMF注冊浑塞,然后我們開始下面的學(xué)習(xí)吧。
1. 老生常談的生命周期和四種狀態(tài)
七個(gè)生命周期方法的特點(diǎn)
onCreate:創(chuàng)建時(shí)調(diào)用
onStart:可見,但是沒焦點(diǎn)
onResume:得到焦點(diǎn)
onPause:依然可見.但是失去焦點(diǎn)
onStop:已經(jīng)不可見
onDestroy:銷毀了 前六個(gè)狀態(tài)方法
onRestart:重啟
當(dāng)系統(tǒng)內(nèi)存不足時(shí)孕惜,之前啟動但未退出的進(jìn)程愧薛,會被系統(tǒng)殺死,根據(jù)LRU(最近最少使用)算法確定殺死哪個(gè)進(jìn)程
Activity被銷毀衫画,進(jìn)程并不會被銷毀毫炉,這是為了下一次啟動更快
1.1、Activity四種狀態(tài)
runing ?交互狀態(tài) ?對應(yīng) onResume
paused 對應(yīng) onPause
stopped ?對面 OnStop
killed ?已經(jīng)被干死了
2. 啟動方式(跳轉(zhuǎn)方式)
啟動方式分為顯示啟動和隱式啟動
顯示啟動:效率較高 常用啟動方式
Intent intent=new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
隱式啟動:通過動作跳轉(zhuǎn) 一般用于調(diào)用系統(tǒng)應(yīng)用(如:報(bào)號器等)
Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);//啟動系統(tǒng)自帶的撥號器應(yīng)用
startActivity(intent);
2.1 有回調(diào)的跳轉(zhuǎn) ?startActivityForResult
A(Activity)-----跳轉(zhuǎn)----->B(Activity)
Intent intent = new Intent();
intent.setClass(this, B.class);
startActivityForResult(intent, requestCode);//開啟activity并且獲取返回值
B (Activity)
Intent data = new Intent();
data.putExtra("phone", phone);
setResult(0, data); ?//回傳數(shù)據(jù)
A? ? (Activity)
//通過data獲取返回的數(shù)據(jù) ?B窗口關(guān)閉 ?A窗口運(yùn)行一下方法
onActivityResult(int requestCode, int resultCode, Intent data) {
削罩。瞄勾。。弥激。丰榴。。//處理回調(diào)的數(shù)據(jù)
}
2.2 Activity跳轉(zhuǎn)生命周期的變法
下圖紅框內(nèi)的是A的生命周期秆撮,這是正常情況下四濒。
我們知道當(dāng)Activity界面被旋轉(zhuǎn),Activity會重新創(chuàng)建职辨。
解決:在AMF的Activity中添加android:configChanges="orientation|screenSize"盗蟆。
(android:configChanges="orientation|keyboardHidden",這個(gè)是較低版本的安卓系統(tǒng)的情況舒裤,4.0之后的版本要加上 screenSize 才有效喳资。)
實(shí)際開發(fā)中我們一般都是不允許Activity旋轉(zhuǎn),這樣既能保證Activity不被重新創(chuàng)建腾供,也能保證布局的適配仆邓,當(dāng)然也更適合我們使用手機(jī)的習(xí)慣鲜滩。
解決:第一種在AMF中添加 android:screenOrientation="portrait"
第二種在代碼中設(shè)置setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
PS:screenOrientation的幾個(gè)參數(shù)
"unspecified":默認(rèn)值 由系統(tǒng)來判斷顯示方向.判定的策略是和設(shè)備相關(guān)的,所以不同的設(shè)備會有不同的顯示方向.
"landscape":橫屏顯示(寬比高要長)
"portrait":豎屏顯示(高比寬要長)
"user":用戶當(dāng)前首選的方向
"behind":和該Activity下面的那個(gè)Activity的方向一致(在Activity堆棧中的)
"sensor":有物理的感應(yīng)器來決定节值。如果用戶旋轉(zhuǎn)設(shè)備這屏幕會橫豎屏切換徙硅。
"nosensor":忽略物理感應(yīng)器,這樣就不會隨著用戶旋轉(zhuǎn)設(shè)備而更改了("unspecified"設(shè)置除外)搞疗。
還有一種情況就是Activity被系統(tǒng)回收嗓蘑,加入被回收的Activity叫A,那么當(dāng)我們從B回到A時(shí)匿乃,A會重新創(chuàng)建桩皿。
3.啟動模式
Activity有四中啟動模式
Standard:默認(rèn)啟動模式先進(jìn)后出
SingleTop:棧頂模式當(dāng)前Activity在棧頂(實(shí)例),那么就不會再創(chuàng)建了幢炸, 如果不在棧頂 會創(chuàng)建 新的Activity
SingleTask:任務(wù)棧模式當(dāng)前棧只能存在一個(gè)實(shí)例泄隔。當(dāng)前Activity在棧頂(實(shí)例),那么就不會再創(chuàng)建了宛徊;
如果不在棧頂梅尤,則會跳轉(zhuǎn)到實(shí)例Activity,實(shí)際上是殺死棧中該Activity上方的所有Activity岩调,讓其成為棧頂Activity
SingleInstance:實(shí)例模式保證整個(gè)手機(jī)內(nèi)存中都只有一個(gè)該Activity的實(shí)例。 每次創(chuàng)建都是在一個(gè)新的棧里創(chuàng)建Activity
4. 擴(kuò)展
4.1 scheme跳轉(zhuǎn)協(xié)議
Android中的scheme是一種頁面內(nèi)跳轉(zhuǎn)協(xié)議赡盘,通過定義自己的scheme協(xié)議号枕,可以跳轉(zhuǎn)到app中的各個(gè)頁面
服務(wù)器可以定制化告訴app跳轉(zhuǎn)哪個(gè)頁面,App可以通過跳轉(zhuǎn)到另一個(gè)App頁面
可以通過H5頁面跳轉(zhuǎn)頁面(如:花生米地鐵wifi)
使用方法:AMS中的Activity添加一個(gè)過濾器
Activity獲取外部跳轉(zhuǎn)的消息
Intent intent =getIntent();
Log.e(TAG, "scheme:" +intent.getScheme());
Uri uri =intent.getData();
Log.e(TAG, "scheme: "+uri.getScheme());
Log.e(TAG, "host: "+uri.getHost());
Log.e(TAG, "port: "+uri.getPort());