常規(guī)的生命周期的幾個(gè)函數(shù)就不說了,說幾個(gè)之前自己用的不多的
onTouchEvent
public boolean onTouchEvent(MotionEvent event)
手機(jī)屏幕事件的處理方法onTouchEvent。該方法在View類中的定義览爵,并且所有的View子類全部重寫了該方法语淘,應(yīng)用程序可以通過該方法處理手機(jī)屏幕的觸摸事件。該方法的簽名如下所示帘不。
參數(shù)event:參數(shù)event為手機(jī)屏幕觸摸事件封裝類的對(duì)象,其中封裝了該事件的所有信息铛纬,例如觸摸的位置厌均、觸摸的類型以及觸摸的時(shí)間等。該對(duì)象會(huì)在用戶觸摸手機(jī)屏幕時(shí)被創(chuàng)建告唆。
返回值:該方法的返回值機(jī)理與鍵盤響應(yīng)事件的相同棺弊,同樣是當(dāng)已經(jīng)完整地處理了該事件且不希望其他回調(diào)方法再次處理時(shí)返回true,否則返回false擒悬。
onNewIntent
protected void onNewIntent(Intent intent)
singTask模式下模她,系統(tǒng)創(chuàng)建一個(gè)新的Task,并在Task的底部實(shí)例化Activities懂牧。然而侈净,當(dāng)一個(gè)實(shí)例存在于一個(gè)獨(dú)立的Task時(shí),系統(tǒng)不是去創(chuàng)建一個(gè)新的實(shí)例僧凤,而是調(diào)用onNewIntent()路由到其他任務(wù)的實(shí)例畜侦。在同一時(shí)間,只存在一個(gè)Activity實(shí)例躯保。
Activity第一啟動(dòng)的時(shí)候執(zhí)行onCreate()---->onStart()---->onResume()等后續(xù)生命周期函數(shù)旋膳,也就時(shí)說第一次啟動(dòng)Activity并不會(huì)執(zhí)行到onNewIntent(). 而后面如果再有想啟動(dòng)Activity的時(shí)候,那就是執(zhí)行onNewIntent()---->onResart()------>onStart()----->onResume(). 如果android系統(tǒng)由于內(nèi)存不足把已存在Activity釋放掉了途事,那么再次調(diào)用的時(shí)候會(huì)重新啟動(dòng)Activity即執(zhí)行onCreate()---->onStart()---->onResume()等验懊。
當(dāng)調(diào)用到onNewIntent(intent)的時(shí)候,需要在onNewIntent() 中使用setIntent(intent)賦值給Activity的Intent.否則尸变,后續(xù)的getIntent()都是得到老的Intent义图。
onKeyDown
跟onTouchEvent類似,不過處理的是按鍵事件
moveTaskToBack
模擬現(xiàn)在的主流應(yīng)用最后按Back鍵時(shí)不是強(qiáng)制退出應(yīng)用或直接結(jié)束根Activity召烂,而是采取類Home鍵效果碱工,此時(shí)可以直接通過此函數(shù)實(shí)現(xiàn),非常實(shí)用。
@Override
public void onBackPressed() {
moveTaskToBack(true);
}
startActivityForResult / onActivityResult / setResult 函數(shù)組合
此函數(shù)組合主要用于如下場(chǎng)景:用戶在A Activity上點(diǎn)擊某個(gè)按鈕痛垛,跳轉(zhuǎn)到B Activity草慧,然后用戶在B Activity上進(jìn)行一些具體的操作,待操作完成后返回到A Activity匙头,同時(shí)常常將B Activity中操作的一些數(shù)據(jù)返回到A Activity中漫谷。
再如上場(chǎng)景中,A -> B 需要通過startActivityForResult()方式打開蹂析。
onSaveInstanceState / onRestoreInstanceState調(diào)用時(shí)機(jī)
onSaveInstanceState調(diào)用時(shí)機(jī):當(dāng)Activity變得“容易”被系統(tǒng)銷毀時(shí)舔示,onSaveInstanceState即被回調(diào),除非該activity是被用戶主動(dòng)銷毀的电抚,例如當(dāng)用戶按BACK鍵的時(shí)候惕稻。
注意上面的雙引號(hào),何為“容易”蝙叛?言下之意就是該activity還沒有被銷毀俺祠,而僅僅是一種可能性。這種可能性有哪些借帘?
1.當(dāng)用戶按下HOME鍵時(shí)蜘渣;
2.長(zhǎng)按HOME鍵,選擇運(yùn)行其他的程序時(shí)肺然;
3.按下電源按鍵(關(guān)閉屏幕顯示)時(shí)蔫缸;
4.從activity A中啟動(dòng)一個(gè)新的activity時(shí);
5.屏幕方向切換時(shí)际起,例如從豎屏切換到橫屏?xí)r拾碌。
onRestoreInstanceState調(diào)用時(shí)機(jī),activity A“確實(shí)”被系統(tǒng)銷毀了街望,而如果僅僅是停留在有這種可能性的情況下校翔,則該方法不會(huì)被調(diào)用。另外灾前,onRestoreInstanceState的bundle參數(shù)也會(huì)傳遞到onCreate方法中展融,也可以選擇在onCreate方法中做數(shù)據(jù)還原。
@Override
2 protected void onRestoreInstanceState(Bundle savedInstanceState) {
3 // TODO Auto-generated method stub
4 super.onRestoreInstanceState(savedInstanceState);
5 savedInstanceState.getString("name", "");
6
7 }
8
9 @Override
10 public void onSaveInstanceState(Bundle savedInstanceState) {
11 super.onSaveInstanceState(savedInstanceState);
12 savedInstanceState.putString("name", "corn");
13 }
或在onCreate中:
1 public class AActivity extends ActionBarActivity {
2
3 private String name;
4
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.a);
9
10 if (savedInstanceState != null) {
11 name = savedInstanceState.getString("name");
12 }
13
14 }
15
16 }
需要注意的是豫柬,onSaveInstanceState被調(diào)用時(shí),其調(diào)用發(fā)生在Activity生命周期中具體的位置扑浸。以A->B為例烧给,A中onSaveInstanceState調(diào)用發(fā)生在A:onPause -> B:onCreate -> B:onResume -> A:onSaveInstanceState -> A:onStop。
onSaveInstanceState常常用于存儲(chǔ)應(yīng)用程序中當(dāng)前Activity中重要的狀態(tài)數(shù)據(jù)喝噪,以免Activity被系統(tǒng)意外殺掉的情況下當(dāng)用戶再次回來時(shí)不能找到之前的狀態(tài)础嫡。如同一個(gè)Activity中使用多個(gè)fragment實(shí)現(xiàn)菜單功能時(shí),最好需要在此函數(shù)中記錄下當(dāng)前菜單對(duì)應(yīng)的fragment id等。