四大組件之Activity
阿新 • • 發佈:2019-05-09
包含 -- destroy onrestart 交互 string per tar 周期
四大組件之Activity
1. 理論概述
1.1 Activity的理解
Servlet的理解回顧
- 狹義
- Servlet是一個interface,我們的Servlet類都必須是此接口的實現類
- 廣義
- Servlet是一種服務器端的組件,用來處理客戶端(瀏覽器)提交的請求,並返回一個響應界面
組件的特點
- 它的類必須實現特定接口或繼承特定類
- 需要在配置文件中配置其全類名
- 它的對象不是通過new來創建的,而是系統自動創建的
- 它的對象具有一定的生命周期,它的類中有對應的生命周期回調方法
Activity的定義
- Activity,直譯為活動,它是Android定義的四大應用組件之一,也是最重要用得最多的
- Activity用來提供一個能讓用戶操作並與之交互的界面
- 一個應用有多個界面,也就是包含多個Activity
- 打電話,發短信,拍照,發郵件等功能都是通過Activity來做的
類比Activity與Servlet
Servlet | Activity | |
---|---|---|
組件 | 服務器端組件 | Android客戶端組件 |
規範定義的接口或類 | Servlet接口 | Activity類 |
註冊 | web.xml | AndroidManifest.xml |
生命周期方法 | init() service() doGet() doPost() destroy() |
onCreate() onStart() onResume() onDestroy() |
請求的發出源 | 瀏覽器/移動設備 | 手機屏幕 |
1.2 Intent和IntentFilter的理解
Intent的理解
- Intent,直譯為意圖,也就是你想要做什麽或想要去哪?
- Intent是Activity,Service和BroadcastReceiver這三個應用組件之間進行通信的信使,例如:我要在Activity中啟動另一個Activity,就必須使用Intent對象
- 意圖對象還可以攜帶數據
- 註意:Intent不是Android中的四大應用組件之一
Intent的分類
- 顯示意圖:明確指定的目標組件的意圖
- 創建對象:Intent(Context context,Class clazz)
- 何時使用:當操作當前自己應用的組件時使用
- 隱式意圖:沒有明確指定目標組件的意圖
- 創建對象:Intent(String ation)
- 何時使用:當操作其它應用的組件時使用
IntentFilter的理解
在配置Activity時,可以為Activity指定一個IntentFilter的配置
如果你的Activity希望其它應用能訪問到,需要配置
<intent-filter>
如果你想啟動其它應用的界面你必須用隱式intent,且目標界面Activity配置了
<intent-filter>
它的作用類似於web中的為Servlet配置的
<url-pattern>
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
1.3 相關API
- Intent意圖
Intent(Context packageContext,Class<?> cls)
:用於創建顯示意圖對象Intent(String action)
:用於創建隱式意圖對象putExtra(String name,Xxx value)
:保存額外數據Xxx getXxxExtra(String name)
:獲取額外數據setData(Uri data)
:設置有特定格式的uri數據
- Activity:活動
startActivity(Intent intent)
:一般啟動ActivitystartActivityForResult(int reqCode,Intent intent)
:帶回調啟動ActivityonActivityResult(int reqCode,int resultCode,Intent data)
:回調方法setResult(int resultCode,Intent data)
:設置要返回的結果finish()
:結束當前ActivitygetIntent()
:得到啟動Activity的意圖
- View:代表視圖的根基類
setOnClickListener(OnClickListener listener)
:設置點擊監聽setOnLongClickListener(OnLongListener listener)
:設置長按監聽
- SmsManager:發送短信的工具類
static SmaManager getDefault()
:得到當前對象sendTextMessage(…)
:發送短信
- 設置點擊監聽的2種方式
- 方式一:Activity中添加監聽:
view.setOnClickListener(OnClickListener listener);
- 方式二:布局添加監聽:
- layout中:
android:onclick="方法名"
- Activity中:
public void 方法名(View v){ }
- layout中:
- 方式一:Activity中添加監聽:
- 設置長按監聽
view.setOnLongClickListner(OnLongListener listener)
2.Activity開發
2.1 Activity的使用
2.2 Activity的生命周期
Activity界面的四種狀態
- 運行狀態:可見也可操作
- 暫停狀態:可見但不可操作
- 停止狀態:不可見,但對象存在
- 死亡狀態:對象不存在
Activity生命周期回調方法
onCreate()
- onStart()
- onResume()
- onPause()
- onRestart()
- onStop()
onDestroy()
1)界面從“死亡”到“開始”
創建對象-->onCreate()-->onStart()-->onResume()
2) 界面從“運行”-->“死亡”
onPause()-->onStop()-->onDestroy()
3) 界面從“運行”-->“停止”
onPause()-->onStop()
4) 界面從“停止”-->“運行”
onRestart()-->onStart()-->onResume()
5) 界面從“運行”-->“暫停”
onPause()
6) 界面從“暫停”-->“運行”
onResume()
重要的:
1. onCreate():在Activity對象創建後調用,只執行一次
2. onDestroy():在Activity死亡之前調用,只執行一次
3. onResume():界面只有經歷此方法才能可見可操作
2.3 Activity的TaskStack
- 在Android中,系統用Task Stack(Back Stack)結構來存儲管理啟動的Activity對象
- 一個應用啟動,系統就會為其創建一個對應的Task Stack來存儲並管理該應用的Activity對象
- 只有最上面的任務棧的棧頂的Activity才能顯示在窗口中
2.4 Activity的launchMode
在Android中,啟動一個Activity有時需要總是創建一個新對象,有時需要復用已有的對象,可以通過在配置activity時通過 launchMode屬性指定。
launchMode屬性值(4個)為:
- Standard:
- 標準模式,每次調用
startActivity()
方法就會產生一個新的實例。
- 標準模式,每次調用
- singleTop:
- 如果已經有一個實例位於Activity棧的頂部時,就不產生新的實例
- 如果不位於棧頂,會產生一個新的實例
- singleTask:
- 只有一個實例,默認在當前Task中
- singleInstance:
- 只有一個實例,創建時會新建一個棧,且此棧中不能有其它對象
3. 功能練習
3.1 打電話與發短信
- 進入電話撥打界面的意圖:Intent.ACTION_DIAL
- 進入短信編輯界面的意圖:Intent.ACTION_SENDTO
- 撥打電話的意圖:Intent.ACTION_CALL
- 發送短信的工具類:SmsManager
- 需要的權限:
- 打電話的權限:android.permission.CALL_PHONE
- 發短信的權限:android.permission.SEND_SMS
- 撥打電話的Uri:tel:110
- 進入短信界面的電話Uri:smsto:110
- 攜帶額外短信數據的標識名為:sms_body
四大組件之Activity