1. 程式人生 > >2017過度到2018,需要整點面試題

2017過度到2018,需要整點面試題

1.Acticity和Service是否在同一個執行緒工作

這個問題有坑,沒有絕對條件可以判定是不是在一個執行緒工作
同一個包內的activity和service

1)如果service沒有設定屬性android:process=”:remote”的話,service會和activity跑在同一個程序中,由於當前這個程序只有一個UI執行緒,所以,service和acitivity就是在同一個執行緒裡面的;
2)如果設定了屬性android:process=”:remote”的話,那麼就是跨程序訪問,但是跨程序訪問有可能出現各種各樣的問題

2.Activity生命週期知道吧,onStart()和onResume()的區別是什麼

我們得知道這兩個方法是什麼意思
onStart()是activity介面被顯示出來的時候執行的,使用者可見,包括有一個activity在他上面,但沒有將它完全覆蓋,使用者可以看到部分activity但不能與它互動
onResume()是當該activity與使用者能進行互動時被執行,使用者可以獲得activity的焦點,能夠與使用者互動。

onStart()通常就是onStop()(也就是使用者按下了home鍵,activity變為後臺後),之後使用者再切換回這個activity就會呼叫onRestart()而後呼叫onStart()
onResume()是onPause()(通常是當前的acitivty被暫停了,比如被另一個透明或者Dialog樣式的Activity覆蓋了),之後dialog取消,activity回到可互動狀態,呼叫onResume()。

3.介紹下LaunchMode及其使用方式

standard 模式
這是預設模式,每次啟用Activity時都會建立Activity例項,並放入任務棧中。使用場景:大多數Activity。

singleTop
只要這個Activity不在棧頂,都會建立新的例項,當然是用在各個頁面都會呼叫的內容頁面,詳細頁面了

singleTask
只存在一個例項,存在之後,再次跳轉(複用存在的例項,並且將其置於棧頂)進來的時候,會走onNewIntent,並且會清空介面顯示的資料

singleInstance
在一個新棧中建立該Activity的例項,並讓多個應用共享該棧中的該Activity例項,當其存在例項的時候,再次呼叫的時候,也會走onNewIntent方法

4.ANR

在activity的關鍵生命週期方法裡例如像onCreate()和onResume()不要進行耗時操作。潛在的耗時操作例如網路和資料庫操作、複雜的耗時計算(例如:重新計算bitmap的大小)都應該放在子執行緒裡。
產生子執行緒的最有效的方式用AsyncTask類。

先寫到這裡吧,我在整理下,續更 2017/12/27 11:51