Android常見面試題總結(二)

1、Activity正常、異常情況下的生命週期流程。

正常:onCreate(表示Activity正在創建,這是生命週期的和第一人上方法。)

onResume(表示Activity已經被用戶可見,並且出現在前臺開始活動)

onStart(表示Activity正在被啓動)

onPause(表示被暫停)

onRestart(被重啓)

onDestroy(被銷燬)

異常:(1)當用戶打開一個新的Activity的時候,回調如下:

onPause-àonStop;

(2)當用戶再次回到原Activity的時候,回調:

onRestart-àonStart-àonResume;

(3)當用戶按下back回退的時候,回調如下:

onPause-àonStop-àonDestroy;

(4)當Activity被回收後再次打開,生命週期回調同正常的一樣:

(5)當系統配置發生變化後,Activity被銷燬掉,回調onPauseàonStropàonDestroy方法,而且由於是異常情況下終止的,系統會調用onSaveInstanceState來保存當前Activiy的狀態。這個方法調用的時機是在onStop之前,此方法只會出現在Activity被異常終止的情況,正常情況下是不會回調此方法。

(6)當Activity被重新創建後,系統會調用onRestorInstanceState,並且把Activity銷燬時onSaveInstatnceState方法所保存的Bundle對象會作爲參數 同時傳遞給onRestoreInstanceState和onCreate方法,因此可以通過這兩個方法來判斷Activity是否被重建了,若被重建了可以取出之前保存的數據並恢復,注意:從時序上來說,onRestorInstanceState的調用時候是在onStrat之後。


3、IntentService比Service好在哪裏。

Android中的Service是用於後臺服務的,當應用程序被掛到後臺的時候,爲了保證應用某些組件仍然可以工作面引入的,它不是獨立的進程,也不是獨立的線程,它是依賴於應用程序的主線程的,也就是說,在更多的時候不建議在Service中編寫耗時的邏輯和操作,否則會引起ANR.

那麼當我們編寫耗時邏輯的時候,就需要引入IntentService,Intentservice是繼承Service的,那麼與Service不同的是,IntentService在執行onCreate操作的時候,內部開了一個線程,去執行你的耗時操作。

Service本身提供了一個方法 onStartCommand()…….

同時IntentService中提供了這麼一個方法:

provtected abstract void onHandlerIntent(Intentintent);

 

IntentService是通過Handler looper message的方式實現了一個多線程的操作,同時耗時操作也可以被這個線程管理和執行,同時不會產生ANR的情況。

 

4、Thread和HandlerThread的區別。

我的博客中有寫到相關的例子。

5、<include><merge><ViewStub>三者的使用場景。

<include>是如果存在相同的佈局的時候,會將相同的xml文件寫在一個佈局文件中,減少代碼的冗餘。

<merge>它可以刪減多餘的層級,<merge/>多用於替換FragmeLayout或者當一個佈局包含另一個時,消除視圖層次多餘的視圖級。

<ViewStub>當你需要的時候再進行加載,比如一些錯誤信息。

1.  ((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);  

2. // or  

3.  View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();  

 

6、HashSet和HashMap區別。

HashSet實現了Set接口,它不允許集合中有重複的值。

HashMap實現了Map接口,Map接口對鍵值對進行映射。Map中不允許有重複的鍵。

發佈了43 篇原創文章 · 獲贊 14 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章