Activity的簡介

一、Activity在項目結構中的位置及作用
角色:連接View層與Service的一箇中間環節
主要工作:A.抓取界面數據
B.將service層產生的數據顯示在
View層
Service層 ---- 數據計算 ---
 ---- 暴露Dao層 --
 ---- 存放Service組件

二、Activity跳轉 --- Intent
一般情況,一個程序界面有多個,不同的界面之間需要
進行跳轉,界面的跳轉,一般都對應Activity的跳轉


A.有對應的Activity以及界面文件
B.在清單文件內進行配置Activity
C.清單文件application中設置了默認的圖標與文本
  另外,Activity可以自定義圖標和文本
  如果沒有自定義,使用默認
常用跳轉方式:
1、直接指定源與目的Activity
setClass
一般用於當前項目下跳轉
2、直接指定程序以及目的Activity
setClassName(packageName   activityName)
packageName時程序員安裝的包名這個包名具有惟一性,那麼就可以根據包名找到對應的程序


指定包名,指定界面 ---- 
缺點:
A、死代碼 --- 耦合性太高
B、靈活性差
3、泛指符合條件的Activity
A、setAction(name)
B、符合條件的Activity在清單文件中也要指定對應的name的都是可以被喚醒的Activity
Action name --- 配置在Activity的intent filter當中
C、添加CateGory==添加附加的篩選信息
setActivity(“大學”);
CateGory(“武器製造”)進一步篩選
<activity   name ="大學">
<IntentFilter  action ="大學">
<Category  default>


一般CateGory都是default

D、保險起見代碼內部也添加CateGory
  addCateGory();
E、CateGory --- 提供附加條件


三、Intent攜帶數據的方式:
1、putExtra
2、putExtras(Bundle)
前兩種方式比較:
A.數據較少,使用putExtra,效率高
B.第二種方式封裝性更好 --- 數據是調用
其他函數產生的,那麼可以讓這個函數返回
Bundle對象
3、setData()
打電話 "tel: 124"


A.被調用的Activity在清單文件中聲明協議
B.被調用的Activity還需要實現解析符合協議 數據
C.調用者要按照協議傳輸數據


調用系統的Activity,並且傳遞數據

打電話:
setAction --- 版本改變,包名會改
setData ----- "tel:"電話號碼
schmale  host  
權限 -------- 打電話、聯網、發短信
     獲取聯繫人 
"sms:"


解析數據:
1、獲取Intent --- getIntent
2、根據鍵獲取值
  傳遞的鍵與解析的鍵必須完全一致


發短信
打電話案例


1、<intent-filter>
在Activity標籤當中的配置標籤,它對Intent起到過濾作用,只有符合filter內部的配置信息,纔可以訪問
2、數據配置條件
scheme ---- 協議
host ------ 主機 配置Uri前跟 //
port ------ 端口號     :
path ------ 路徑 清單文件配置時前跟 /
jdbc:mysql://localhost:8080/74db

注意:配置順序 從前到後,如果前面的沒有配置後面的配置無效


mimeType --- 配置數據類型 -- 
A.配置格式:“AAA/BBB”
B.調用格式:setDataAndType (uri,"a/b");
setData()和setType()
當同時需要設置Data和Type時,後面的會覆蓋前面的,所以必須使用setDataAndType


3、篩選條件
action ---- 只要有一個符合即可
categroy -- 額外信息


填志願 ----- 復旦 南開 北大 清華
setAction("XXX"); 1 2 3 4 --- 北京
setCategroy -- 車載模式 3 --- 古生物學




返回數據:
1、源:startActivityForResult
2、目的:setResult
設置結果
3、onActivityResult
回調函數,被其他對象調用的
重寫此函數,完成相關功能 --- 數據回顯


請求碼: onActivityResult只有一個,可以根據請求碼的不同做出相應處理
返回碼:由於操作結果不同,那麼可以設置不同的結果碼,根據結果碼進行相應操作
默認結果碼是0

發送短消息
注意:1、SmsManager導包
     2、對短信進行分割處理
     3、send函數的參數:
參數1:電話號碼
參數2:不支持
參數3:短信內容
參數4:發送狀態
參數5:接收狀態
調用系統發送短信功能:
setAction(SEND_SMS);
SetData ---- "mms:" + 電話號碼


三、Activity的生命週期
1、生命週期控制函數
onCreate --- 創建時調用 --- 將Activity加載進內存
onStart ---- 開始 -- 可見
onResume --- 獲取焦點


onPause ---- 失去焦點,但可見
onStop ----- 停止 -- 當前Activity不可見

onDestroy -- 將Activity從內存清除


一般情況:Activity一個生命週期中,只會加載一次,但是特殊情況除外 ---- 內存接近臨界時 -- 可能會被銷燬 --- 如果要再次調用,那麼重新調用onCreate函數

注意:1、onCreate被二次調用的情況
     2、如果覆蓋當前Activity的窗體,整個覆蓋與局部覆蓋兩種情況 --- 當被覆蓋的Activity重新回到前臺時,調用的函數


特殊情況:屏幕狀態切換
橫豎屏切換的底層實現:
1、將當前Activity銷燬
2、重新加載新的Activity
導致的問題:
程序運行到一半,隨着屏幕的切換,必須重新開始
解決方案:
1、關閉屏幕切換
2、在對應的函數內,保存進度,然後當新運行時Activity時,在相應的函數內讀取並加載進度  


四、Activity的加載模式
清單文件中配置:
android:lunchMode

1、標準加載模式:
每開啓一個Activity,那麼就往棧頂存入一個Activity,返回時,每個Activity都必須被一一清除,纔可以返回桌面,這是默認模式
2、singleTop
加載Activity時,會檢查棧頂,如果有就不加載
3、SingleTask
A.如果棧內沒有Activity,加入
B.如果棧內有這個Activity,那麼就將這個Activity之上的所有Activity清空
4、singleInstance
SingleInstance的Activity單獨佔有一個棧,
並且這個棧內只有當前一個實例,它在進行切換時,實際是棧的排列順序的切換,返回時,彈出Activity時,棧也消失
五、其他
回調函數,在A中,但是被B調用
1、回調函數使用時機
案例:隨手指運動的小球
2、回調函數的傳播
以onTouchEvent爲例:
View 和 Activity都有此回調函數,當事件產生時,首先調用的底層(view)的onTouchevent,如果此時返回true,那麼意味着,這個事件處理完成,不需要再調用Activity的onTouchEvent了,如果返回false,意味着事件沒有被處理完,需要被Activity的onTouchEvent繼續處理
返回值有關
true ---- 
false --- 


如果內層的onTouchEvent返回false,那麼只能處理按下的動作,鬆開的動作被傳遞到外層處理,又由於Activity的onTouchEvent是處理的最外層,無論返回true或false,都會既處理按下,又處理鬆開

3、Menu
A、一般菜單選項
B、帶有子菜單的菜單選項
菜單的響應 --- groupId 與 ItemId 組合

ContextMenu -- 長按View控件生成的菜單

Fragment

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章