每日一練 20190522

1.Fragment中add與replace的區別(Fragment重疊)ide

參考回答:

add不會從新初始化fragment,replace每次都會。因此若是在fragment生命週期內獲取獲取數據,使用replace會重複獲取;
添加相同的fragment時,replace不會有任何變化,add會報IllegalStateException異常;
replace先remove掉相同id的全部fragment,而後在add當前的這個fragment,而add是覆蓋前一個fragment。因此若是使用add通常會伴隨hide()和show(),避免佈局重疊;
使用add,若是應用放在後臺,或以其餘方式被系統銷燬,再打開時,hide()中引用的fragment會銷燬,因此依然會出現佈局重疊bug,可使用replace或使用add時,添加一個tag參數;

 

2.getFragmentManager、getSupportFragmentManager 、getChildFragmentManager之間的區別?佈局

參考回答:

getFragmentManager()所獲得的是所在fragment 的父容器的管理器,
getChildFragmentManager()所獲得的是在fragment  裏面子容器的管理器,
若是是fragment嵌套fragment,那麼就須要利用getChildFragmentManager();
由於Fragment是3.0 Android系統API版本纔出現的組件,因此3.0以上系統能夠直接調用getFragmentManager()來獲取FragmentManager()對象,而3.0如下則須要調用getSupportFragmentManager() 來間接獲取;

 3.FragmentPagerAdapter與FragmentStatePagerAdapter的區別與使用場景線程

參考回答:

相同點 :兩者都繼承PagerAdapter
不一樣點 :FragmentPagerAdapter的每一個Fragment會持久的保存在FragmentManager中,只要用戶能夠返回到頁面中,它都不會被銷燬。所以適用於那些數據相對靜態的頁,Fragment數量也比較少的那種;
FragmentStatePagerAdapter只保留當前頁面,當頁面不可見時,該Fragment就會被消除,釋放其資源。因。

 4.談一談Service的生命週期?對象

參考回答:Service的生命週期涉及到六大方法

onCreate():若是service沒被建立過,調用startService()後會執行onCreate()回調;若是service已處於運行中,調用startService()不會執行onCreate()方法。也就是說,onCreate()只會在第一次建立service時候調用,屢次執行startService()不會重複調用onCreate(),此方法適合完成一些初始化工做;
onStartComand():服務啓動時調用,此方法適合完成一些數據加載工做,好比會在此處建立一個線程用於下載數據或播放音樂;
onBind():服務被綁定時調用;
onUnBind():服務被解綁時調用;
onDestroy():服務中止時調用;

 5.Service的兩種啓動方式?區別在哪?blog

參考回答:Service的兩種啓動模式

startService():經過這種方式調用startService,onCreate()只會被調用一次,屢次調用startSercie會屢次執行onStartCommand()和onStart()方法。若是外部沒有調用stopService()或stopSelf()方法,service會一直運行。
bindService():若是該服務以前還沒建立,系統回調順序爲onCreate()→onBind()。若是調用bindService()方法前服務已經被綁定,屢次調用bindService()方法不會屢次建立服務及綁定。若是調用者但願與正在綁定的服務解除綁定,能夠調用unbindService()方法,回調順序爲onUnbind()→onDestroy();

 

相關文章
相關標籤/搜索