1. 什么是Activity
- Activity是一個應(yīng)用程序組件檩赢,它的主要功能是提供界面,用戶可以用來交互為了完成某項任務(wù)违寞,例如用戶登錄贞瞒、拍照、撥號趁曼、聊天等军浆。
- 一個應(yīng)用程序可能由一個或多個Activity組成,這些Activity怎么顯示挡闰,需要多少個Activity乒融,完全依賴于應(yīng)用的設(shè)計者。
- 一個應(yīng)用程序必須指定一個Activity作為主Activity摄悯,它是程序啟動時首先顯示的界面赞季。
- 每個Activity默認的被給予一個窗口來繪制,一般的奢驯,這個窗口占滿整個屏幕申钩,但是他可以比屏幕小并且浮在另一個窗口的上面。
- 當一個Activity因為新的Activity啟動而被停止時瘪阁,它會收到狀態(tài)變化的通知撒遣,這樣的變化有多個断盛,每個都會引起系統(tǒng)調(diào)用一個相應(yīng)的回調(diào)方法以通知Activity,這些回調(diào)方法被統(tǒng)稱為“生命周期回調(diào)方法”愉舔。這些回調(diào)方法分別在Activity被創(chuàng)建钢猛、停止、恢復(fù)轩缤、銷毀時被調(diào)用命迈。
2. Activity的使用
-
2.1 如何設(shè)置主Activity
在項目的AndroidManifest.xml
文件中,聲明對應(yīng)的Activity火的,同時在activity標簽內(nèi)添加以下代碼:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
整體示例如下:
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
-
2.2 如何啟動其它的Activity
那么壶愤,我們?nèi)绾卧谝粋€Activity中啟動另外一個Activity呢?這里就需要我們使用另外一個重要的組件Intent(關(guān)于Intent組件在這里就不做過多的贅述了)馏鹤。
示例如下(在ManinActivity啟動LoginActivity--即跳轉(zhuǎn)到LoginActivity界面):
Intent intent = new Intent();// 新建一個Intent對象
intent.setClass(MainActivity.this, LoginActivity.class);// 設(shè)置Intent目標
startActivity(intent);// 執(zhí)行跳轉(zhuǎn)(啟動LoginActivity)
-
2.3 Activity常用的數(shù)據(jù)傳遞方式
- 1.Intent
傳遞(value可以為其它數(shù)據(jù)類型,key必須為String類型):
- 1.Intent
Intent intent = new Intent();// 新建一個Intent對象
intent.setClass(MainActivity.this, LoginActivity.class);// 設(shè)置Intent目標
intent.putExtra("key", "value");// 設(shè)置要傳遞內(nèi)容的key與value
startActivity(intent);// 執(zhí)行跳轉(zhuǎn)(啟動LoginActivity)
獲取(在目標Activity使用一下代碼獲取傳遞的值):
getIntent().getStringExtra("key");// 獲取執(zhí)行傳遞動作的Intent根據(jù)key獲取對應(yīng)的value值
- 2.SharedPreference
存:
SharedPreferences sp = getSharedPreferences("test", 0);// test->存儲文件名
SharedPreferences.Editor edit = sp.edit();
edit.putString("username", "admin");
edit.putString("password", "123456");
edit.commit();
日鹘贰:
SharedPreferences ps = getSharedPreferences("test", 0);// test是存儲文件
String userName = ps.getString("username", "defaultName");
String passWord = ps.getString("password", "defaultPw");
> SharedPreference存儲步驟:
1.根據(jù)Context獲取SharedPreferences對象;
2.利用edit()方法獲取Editor對象;
3.通過Editor對象存儲key-value鍵值對數(shù)據(jù);
4.通過Editor對象存儲key-value鍵值對數(shù)據(jù)。
- 3.SQLite
關(guān)于SQLite內(nèi)容過多湃累,推薦參閱 [ANDROID開發(fā)之SQLite詳解](http://blog.csdn.net/harvic880925/article/details/24516545)勃救。
注:
Intent/ShraedPreference
適合較簡單的數(shù)據(jù)傳輸,一般用于傳輸一些簡單的參數(shù)或配置信息治力。較大數(shù)據(jù)量的傳輸蒙秒,一般使用SQLite
的方式實現(xiàn)。
3. Activity的啟動模式#
- 3.1 standard 默認的啟動模式,每次激活A(yù)ctivity時(startActivity),都創(chuàng)建Activity實例,并放入任務(wù)棧宵统;
- 3.2 singleTop 如果某個Activity自己激活自己,即任務(wù)棧棧頂就是該Activity,則不需要創(chuàng)建,其余情況都要創(chuàng)建Activity實例晕讲;
- 3.3 singleTask 如果要激活的那個Activity在任務(wù)棧中存在該實例,則不需要創(chuàng)建,只需要把此Activity放入棧頂,并把該Activity以上的Activity實例都出棧;
- 3.4 singleInstance 如果應(yīng)用1的任務(wù)棧中創(chuàng)建了MainActivity實例马澈,如果應(yīng)用2也要激活MainActivity瓢省,則不需要創(chuàng)建,兩應(yīng)用共享該Activity實例痊班。
啟動模式:啟動模式簡單地說就是Activity啟動時的策略,在
AndroidManifest.xml
中的標簽的android:launchMode
屬性設(shè)置.
任務(wù)棧:每個應(yīng)用都有一個任務(wù)棧勤婚,是用來存放Activity的,功能類似于函數(shù)調(diào)用的棧辩块,先后順序代表了Activity的出現(xiàn)順序.
4. Activity的生命周期
Activity生命周期.png
- 啟動Activity:先調(diào)用
onCreate()
蛔六,然后調(diào)用onStart()
荆永,最后調(diào)用onResume()
废亭,Activity進入運行狀態(tài); - 當前Activity被覆蓋或鎖屏:先調(diào)用
onPause()
,然后暫停當前Activity的執(zhí)行狀態(tài); - 解除Activity覆蓋或解鎖時:先調(diào)用
onResume()
具钥,然后再次進入運行狀態(tài); - 跳轉(zhuǎn)到新的Activity界面或按
Home
鍵回到主屏:應(yīng)用進入后臺,系統(tǒng)會先調(diào)用onPause()
豆村,然后調(diào)用onStop()
,轉(zhuǎn)入停滯狀態(tài); - 返回到該Activity:先調(diào)用
onRestart()
骂删,然后調(diào)用onStart()
掌动,最后調(diào)用onResume()
四啰,重新進入到運行狀態(tài); - 在第1.2/1.4步驟情況下,當前Activity被系統(tǒng)kill,用戶操作退回到當前Activity:調(diào)用
onCreate()->onStart()->onResume()
,進入運行狀態(tài); - 用戶退出當前Activity:先調(diào)用
onPause()
粗恢,然后調(diào)用onStop()
柑晒,最后調(diào)用onDestory()
,結(jié)束當前Activity的運行狀態(tài).