“ 金三銀四,又是一年跳槽季,關注我也許面試中你遇到的難題在這里有你想要的解答,”
1.什么是Activity
??Activity是四大組件之一,其他三大組件:service、BroadcastReceiver、ContentProvider;
2.Activity的生命周期
??onCreate()——》onStart()——》onResume()——》onPause()——》onStop()(——》onRestart()——》onStart())——》onDestroy()
3.Service兩種啟動方式
??startService():onCreate()——》onStartCommand()——》Running Service——》onDestroy()
??bindService():onCreate()——》onBind()——》Running Service——》onUnBind()——》onDestroy()
??同一個Service可以在不同Activity中執行,但只有一個Service實體,由于Service運行在主執行緒上所以Service不能直接做耗時操作可創建子執行緒來做耗時操作;
??startService()和bindService()混合啟動時只會創建一個Service,所以只會走一次onCreate()方法,多次呼叫startService()時會多次執行onStartCommand()方法,但是多次bindService()時onBind()方法只會執行一次,如果想要執行多次onBind()方法需要intent.setType(type),給intent值傳入不同type就會認為intent不同然后再次執行onBind()方法,關閉Service的時候也要注意由于兩種啟動方式都執行了想要徹底關閉需要執行unbindService()和stopService(),單一執行任何一個都無法關閉Service;
4.BroadcastReceiver
??BroadcastReceiver普通廣播,廣播發送方式:sendBroadcast()發送無序廣播;
sendOrderBroadcast(intent,“string”)發送有序廣播;sendStickyBroadcast()發送粘滯廣播一直滯留等待下次注冊廣播依然能夠接收此廣播需要注冊權限;
??LocalBroadcastManager本地廣播:只能傳輸在App內部,不會被其他App接收,確保資料安全;接收不到其他App廣播,免干擾;比BrocastReceiver更加高效,
5.ContentProvider
??ContentProvider不同應用資料共享提供增、刪、改、查,
6.Android六大行程分類
- 前臺行程——》可見和正在用戶互動的Activity、service、廣播;
- 可見行程——》能被看見但是沒有用戶互動;
- 服務行程——》音樂播放行程、網路下載行程;
- 后臺行程——》Activity不可見調了onStop()方法的;
- 空行程——》應用back退回桌面時保留空行程作為快取減少組件初始化時間,提高執行緒啟動速度;
??Android行程間不能直接通信需要借助Binder通信,當然要想實作Binder通信還需要通過AIDL和service實作Binder通信;
7.執行緒
??執行緒是CPU調度的基本單位,是一個程式能夠獨立運行的最小單元,作為Android開發者說到執行緒值得一提的是現在很多誤導把Android的Handler跟執行緒混為一談十分令人氣憤的是還有人說用Handler能實作多執行緒,我就想知道Handler就是一個處理訊息的一種機制跟多執行緒有毛線關系啊,如果非要說Handler跟執行緒有關系那也只是能夠用來處理執行緒訊息(比如:在子執行緒中拿到UI程的Handler物件發送訊息然后UI執行緒的Handler拿到訊息就可以重繪UI了)也就這半毛錢的關系,以后考官再問執行緒時千萬不要再說用Handler能夠實作什么多執行緒,不了解Handler的可以先去了解一下Android開發 面試必問的Handler訊息機制,這里就不多講了,還是回來說咱們的執行緒吧,
??先來說說執行緒的五種狀態:
- 新建狀態(New): 執行緒物件被創建后,就進入了新建狀態,
- 就緒狀態(Runnable): 也被稱為“可執行狀態”,執行緒物件被創建后,其它執行緒呼叫了該物件的start()方法時執行緒進入就緒狀態,處于就緒狀態的執行緒,隨時可能被CPU調度執行,
- 運行狀態(Running): CPU發送調度指令,執行緒獲得權限進行執行,注意執行緒只能從就緒狀態進入到運行狀態,
- 阻塞狀態(Blocked): 阻塞狀態是執行緒因為某種原因放棄CPU使用權,暫時停止運行,直到執行緒進入就緒狀態,才有機會轉到運行狀態,阻塞的情況分三種:
- 等待阻塞 – 通過呼叫執行緒的wait()方法,讓執行緒等待某作業的完成,
- 同步阻塞 – 執行緒在獲取synchronized同步鎖失敗(因為鎖被其它執行緒所占用),它會進入同步阻塞狀態,
- 其他阻塞 – 通過呼叫執行緒的sleep()或join()或發出了I/O請求時,執行緒會進入阻塞狀態,當sleep()完成時、join()等待執行緒終止或者超時、或者I/O處理完畢時,執行緒重新轉入就緒狀態,
- 死亡狀態(Dead): 執行緒執行完畢或者因為例外退出了run()方法,該執行緒結束生命周期,
8.多執行緒
??多執行緒時頻繁創建執行緒會造成記憶體過度消耗引起OOM,頻繁切換執行緒會造成CPU過度使用引起卡頓、手機發燙,頻繁銷毀執行緒會因為過度gc造成記憶體抖動引起卡頓、性能降低,所以為了解決這一系列問題防止性能急劇下降,我們就需要使用執行緒池來減少執行緒物件的創建、切換、銷毀,從而減少性能的消耗,
??Executors類提供了4種不同的執行緒池:
- NewCachedThreadPool:適合大量且耗時短任務;無效擴大的快取執行緒池,空閑執行緒可快取60s后就會被殺死回收,只要有請求就必須要找到一條作業執行緒來處理,如果當前沒有空閑執行緒就會重新創建一個新的執行緒,
- NewFixedThreadPool:適合固定數量且耗時較長任務;固定大小執行緒池,核心執行緒數和最大執行緒數都為用戶設定執行緒數,超出固定執行緒為空閑執行緒時立即回收,超出固定執行緒為任務執行緒時則存放到阻塞佇列中等待執行緒是否后按順序執行,
- NewSingleThreadPool:適合按順序執行任務,跟NewFixedThreadPool類似不同的就是固定執行緒數只有一條作業執行緒,超出任務執行緒數固定執行緒數責放到阻塞佇列排隊輸出執行,
- NewScheduleThreadPool:適合周期回圈執行任務,可設定回圈固定執行緒數、首次延遲時間、回圈時間,
長按二維碼關注!你的每個贊和在看,我都喜歡!👍
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/263048.html
標籤:其他
上一篇:Android——顯示Intent和隱式Intent以及IntentFilter匹配規則
下一篇:發布需求:股票全自動交易系統,要求能掛鉤通達信macd,cjdx等指標,按日,120分鐘等周期自動交易,誰能做出程式嗎?
