1. Activity 是什么
- An Activity is an application component that provides a screen with which users can interact in order to do something, such as dial the phone, take a photo, send an email, or view a map.
(一個activity是一個系統(tǒng)組件科吭,它能夠提供一個屏幕用來和用戶進(jìn)行交互操作以滿足用戶的需求吁峻,像打電話,照相,發(fā)郵件或者看地圖) - 安卓系統(tǒng)的四大組件之一 案疲,很常見,想吃飯喝水一樣靴迫,基本所有的界面都是activity的界面或者是依附其生命周期的点弯。
2. Acctivity 的生命周期
上圖
- onCreate():activity被創(chuàng)建所調(diào)用的第一個方法(在我們的能力范圍內(nèi))。在這里需要做初始化的相關(guān)工作榛了,包括設(shè)置視圖在讶,聲明一些變量,注冊事件霜大,也可以解析一些數(shù)據(jù)(from intent)
- onStart(): 表示activity正在被啟動构哺,即將開始,activity正在從不可見到可見战坤。注此時activity還在后臺
- onResume():
- activity已經(jīng)可見曙强,開始活動,此時activity一定是處于任
務(wù)棧的棧頂途茫,一定是在前臺碟嘴。注意和onstart區(qū)分 - 來自onpause 的恢復(fù)回調(diào)。
- activity已經(jīng)可見曙强,開始活動,此時activity一定是處于任
- onPause(): 表示當(dāng)前的activity正在停止囊卜,通常發(fā)生于:
- 在當(dāng)前的activity上展示來了一個控件(dialog)
在這個方法下可以停止當(dāng)前activity的動畫(半透明背景下activity 還在畫動畫臀防,容易使用戶分心眠菇,同事也會占用系統(tǒng)資源),也可以做一些存儲工作袱衷,但是 不能是耗時操作捎废,不然會影響后續(xù)的展現(xiàn)(比如影響新的activity的創(chuàng)建)
- 在當(dāng)前的activity上展示來了一個控件(dialog)
- onStop():表示activity正在停止,當(dāng)activity完全不可見的時候調(diào)用(這里會涉及到一個面試問題致燥,后面講)可以做一些資源回收操作登疗,但是也不能太耗時。
- onRestart():表示activity正在重新啟動嫌蚤,一般情況辐益,當(dāng)activity從不可見變成可見的時候,改方法就會被調(diào)用脱吱,比如
- 啟動了一個新的activity之后按了返回
- 用戶按了home之后又從菜單恢復(fù)
- onDestory: 表示activity正在被銷毀智政,可以做回收工作,資源釋放箱蝠,各種綁定解除啊什么的续捂。
onpause涉及到的面試題,啟動一個新的activity宦搬,著兩個activity的生命周期方法的調(diào)用順序
A.onpause->B.oncreate->B.onstart->B.onResume->A,onstop牙瓢。
另外一點(diǎn)需要注意,當(dāng)activity處理onpause和onstop狀態(tài)下间校,存在被系統(tǒng)回收(kill)的可能性矾克,從圖中可以看出,這種情況下憔足,是不會調(diào)用ondestory 方法的胁附。這時候調(diào)用的是onSaveinstance和onRestoreInstance,著兩個方法只會出現(xiàn)在activity異常終止的情況下(橫豎屏切換滓彰,系統(tǒng)回收)汉嗽,onSave 方法的調(diào)用時在onstop方法之前。當(dāng)activity被重新創(chuàng)建的時候找蜜,系統(tǒng)會把onsave 保存的 bundle 同事傳給oncreate和 onrestore,onstore方法在onstart方法之后被調(diào)用稳析。注 這兩個方法會為我們默認(rèn)做一些恢復(fù)工作洗做,比如文本框用戶輸入的數(shù)據(jù)
也可以在oncreate里這么用
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
if (null != savedInstanceState){
String storeData = savedInstanceState.getString("data");
// TODO: 2017/3/8 deal with save data
}
}
是不是到這里才明白o(hù)ncreate的這個參數(shù)有什么作用呢
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// TODO: 2017/3/8 u can also do something to recover
}
也可以調(diào)用這個。
activity的狀態(tài)
算是科普吧彰居,android是使用任務(wù)來管理活動的诚纸,任務(wù)是針對activity的集合,一個任務(wù)就是一組放在棧里的activity集合陈惰,這個棧就是任務(wù)棧(返回棧)畦徘,棧是從數(shù)據(jù)結(jié)構(gòu)上來管理任務(wù),android系統(tǒng)總是會顯示處于棧頂?shù)腶ctivity
1.四種狀態(tài)
每個activity在其生命周期內(nèi)最多會經(jīng)歷四種狀態(tài)
- 運(yùn)行狀態(tài):當(dāng)activity處于棧頂時,它就是運(yùn)行狀態(tài)
- 暫停狀態(tài):當(dāng)activity不在處于棧頂井辆,但是仍然可見(部分或者全部)关筒,這時activity就處于暫停狀態(tài)。注:只有在系統(tǒng)內(nèi)存極低的時候才會回收
- 停止?fàn)顟B(tài):當(dāng)activity不再處于棧頂且完全不可見的時候杯缺,這種狀態(tài)下這個activity是否繼續(xù)存活取決于系統(tǒng)會不會收拾掉他蒸播,一般來講,沒有內(nèi)存不足的情況的話萍肆,系統(tǒng)會為你保留的袍榆,祈禱吧。
- 銷毀狀態(tài): 從任務(wù)棧中移除了塘揣。一旦移除包雀,系統(tǒng)更加會回收這種activity以保證手機(jī)的內(nèi)存充足。
------------------------------------------------------Have A Nice Day -----------------------------------------------------