
- 用戶參與
用戶最常見的兩種操作, 按Home鍵或Back鍵.
(1) 點(diǎn)擊Home鍵, 暫停當(dāng)前Activity, 調(diào)用onPause –> onSaveInstanceState –> onStop; 再次返回, 恢復(fù)當(dāng)前頁面, 調(diào)用onRestart -> onStart -> onResume.
(2) 點(diǎn)擊Back鍵, 關(guān)閉當(dāng)前Activity, 調(diào)用onPause -> onStop -> onDestroy; 再次啟動(dòng)則為重建, 從onCreate開始調(diào)用.
onStart()是Activity可見, 無法交互; onResume()是Activity可見, 可以交互. onPause是Activity無法交互, 必須執(zhí)行前一個(gè)Activity的onPause完成, 后一個(gè)Activity才能啟動(dòng), 在onPause中, 不能執(zhí)行復(fù)雜的操作, 否則會(huì)影響下一個(gè)Activity啟動(dòng)速度. onStop是Activity關(guān)閉顯示.
(3)屏幕旋轉(zhuǎn)
如果你不做任何配置
啟動(dòng)Activity會(huì)執(zhí)行如下方法:
onCreate –> onStart –> onResume之后旋轉(zhuǎn)屏幕,則Activity會(huì)被銷毀并重新創(chuàng)建竞穷,之后便會(huì)執(zhí)行如下方法:onPause –> onSaveInstanceState –> onStop –> onDestroy –> onCreate –> onStart –> onRestoreInstanceState –> onResume
在系統(tǒng)調(diào)用onCreate()之后奢方,就會(huì)調(diào)用onStart(),然后繼續(xù)調(diào)用onResume以進(jìn)入Resumed狀態(tài)并村,最后就會(huì)停在Resumed狀態(tài)慧妄,完成啟動(dòng)撒汉。系統(tǒng)會(huì)調(diào)用onDestrory()來結(jié)束一個(gè)Activity的聲明周期讓它回到Killed形態(tài)溺职。
onCreate():創(chuàng)建基本的UI元素芭概。
onPause()與onStop():清除Activity的資源赛不,避免浪費(fèi)。
onDestory():因?yàn)橐脮?huì)在Activity銷毀的時(shí)候銷毀罢洲,而線程不會(huì)踢故,所以清除開啟的線程。
Activity啟動(dòng)模式
- standard(標(biāo)準(zhǔn)模式)
- singleTop(棧頂復(fù)用模式)
- singleTask(站內(nèi)復(fù)用模式)
- singleInstance(單實(shí)例復(fù)用模式)

standard
默認(rèn)的啟動(dòng)模式惹苗,如果不指定Activity的啟動(dòng)模式殿较,則使用這種方式啟動(dòng)Activity。這種啟動(dòng)模式每次都會(huì)創(chuàng)建新的實(shí)例桩蓉,每次點(diǎn)擊standard模式創(chuàng)建Activity后淋纲,都會(huì)創(chuàng)建新的Activity覆蓋在原Activity上。
singleTop
系統(tǒng)會(huì)判斷當(dāng)前棧頂Activity是不是要啟動(dòng)的Activity院究,如果是則不創(chuàng)建新的Activity而直接引用這個(gè)Acitivty洽瞬。
singleTask
singleTask是檢查整個(gè)Activity棧中是否存在當(dāng)前需要啟動(dòng)的Activity。如果存在儡首,則將在Activity主語棧頂片任,并將該Activity以上的Acitivity以上的Activity都銷毀偏友。不過這里是指在同一個(gè)app中啟動(dòng)這個(gè)singleTask的Activity蔬胯,如果是其他程序singleTask模式來啟動(dòng)這個(gè),那么它將創(chuàng)建一個(gè)新的任務(wù)棧位他。
singleInstance
singleInstance這種啟動(dòng)模式和使用的瀏覽器工作原理類似氛濒,比如多個(gè)程序訪問瀏覽器,如果沒有打開鹅髓,則會(huì)打開瀏覽器舞竿。申明為singleInstance也一樣,舉個(gè)例子窿冯,如果應(yīng)用A的任務(wù)棧中創(chuàng)建了MainActivity實(shí)例骗奖,且啟動(dòng)模式為singleInstance,如果B也要激活MainActivity,則不需要?jiǎng)?chuàng)建。
Intent Flag模式
- Intent.FLAG_Activity_NEW_TASK
- Intent.FLAG_ACTIVITY_CLEAR_TOP
- Intent.FLAG_ACTIVITY_CLEAR_TOP
- Intent.FLAG.ACTIVITY_NO_HISTORY
創(chuàng)建醒串、配置Service
public class FirstService extends Service{
//必須實(shí)現(xiàn)的方法
@Override
public IBinder onBind(Intent arg0){
return null
}
//Service被創(chuàng)建時(shí)回調(diào)該方法
@Override
public void onCreated(){
super.onCreate()执桌;
}
//Service被啟動(dòng)時(shí)回調(diào)該方法
@Override
public int onStartCommand(Intent intent,int flags,int startId){
return START_STICKY;
}
//Service被關(guān)閉之前回調(diào)該方法
@Override
public void onDestory(){
super.onDestory();
}
}
在AndroidManifest配置Service
<serivce name=".FirstService" />
當(dāng)Service開發(fā)完成之后,接下來就要在程序中運(yùn)行Service了芜赌,通過Context的startService方法仰挣,通過該方法啟動(dòng)Service,訪問者與Service之間沒有關(guān)聯(lián)。
如果Service和訪問者之間需要進(jìn)行調(diào)用或交換數(shù)據(jù)缠沈,則應(yīng)該使bingService()和unbingService()方法啟動(dòng)膘壶、關(guān)閉Service错蝴。
public class BindService extends Service{
private int count;
private boolean quit;
//定義onBinder方法鎖返回的對(duì)象
private MyBinder binder=new MyBinder();
//通過繼承Binder來實(shí)現(xiàn)IBinder類
public class MyBinder extends Binder{
public int getCount(){
//獲取Service的運(yùn)行狀態(tài)
return count;
}
}
//必須實(shí)現(xiàn)的方法,綁定該Service時(shí)回調(diào)該方法
@Override
public IBinder onBind(Intent intent){
//返回IBinder對(duì)象
return binder;
}
@Override
public void onCreate(){
super.onCreate();
new Thread(){
@Override
public void run(){
while(!quit){
try{
Thread.sleep(1000);
}
catch(InterruptedException){
}
count++;
}
}
}.start();
}
//Service被斷開連接時(shí)回調(diào)改方法
@Override
public boolean onUnbind(Intent intent){
return true;
}
//Service被關(guān)閉之前回調(diào)該方法
@Override
public void onDestory(){
super.onDestory();
this.quit=true;
}
}
pirvate ServiceConnection conn=new ServiceConnection(){
@Override
public void onSeriviceConnected(ComponentName name,IBinder serivce){
//獲取Serivce的onBind方法鎖返回的MyBinder對(duì)象
binder=(BinderService.MyBinder)serivce;
}
//當(dāng)該Activity與Service斷開連接時(shí)回調(diào)改方法
@Override
public void onSerivceDisconnected(ComponentName name){
}
}

ContentProvider
ContentProvider相當(dāng)于一個(gè)“網(wǎng)站”颓芭,它的作用是暴露可供操作的數(shù)據(jù)顷锰;其它應(yīng)用程序則通過ContentResolver來操作ContentProvider所暴露的數(shù)據(jù),ContentResolver相當(dāng)于HttpClient.