安卓面試知識(shí)點(diǎn)筆記

Activity生命周期

1.activity的4種狀態(tài)

running/paused/stopped/killed


activity生命周期圖.png

2.安卓進(jìn)程優(yōu)先級(jí)

前臺(tái)被饿、可見容达、服務(wù)衙猪、后臺(tái)、空

Fragment

1. Fragment為什么被稱為第五組件

  • 有自己的生命周期哑芹,加載到activity里因惭。
  • 更節(jié)省內(nèi)存,ui切換更自然绩衷。

2. Fragmnet 加載到Activity的方式

  1. 靜態(tài)加載:添加Fragment到Activity的布局文件中
  2. 動(dòng)態(tài)加載:動(dòng)態(tài)再activity中添加fragment
                FragmentTransaction transaction = manager.beginTransaction();  
                Fragment1 fragment1 = new Fragment1();  
                transaction.add(R.id.fragment_container, fragment1);  
                transaction.commit();  

3. FragmentPagerAdapter與FramentStatePagerAdapter的區(qū)別

  • FragmentPagerAdapter前者適合頁(yè)面較少,只是把ui分離激率,沒(méi)有回收資源
  • FramentStatePagerAdapter后者適合頁(yè)面較多的情況咳燕。destroyItem()回收資源,回收內(nèi)存乒躺。

4. Fragment生命周期

fragment生命周期圖.png

5. Fragment的通信

1)在Fragment中調(diào)用Activity中的getActivity()
2)在Activity中調(diào)用Fragment中的方法招盲,接口回調(diào)
3)在Fragment中調(diào)用Fragment中的方法findFragmentById

6. Fragment的replace、add嘉冒、remove

  • replace替換實(shí)例
  • add添加實(shí)例
  • remove移除實(shí)例

Service

1.Service是什么

Service是一個(gè)一種可以在后臺(tái)執(zhí)行長(zhǎng)時(shí)間運(yùn)行曹货,無(wú)界面的應(yīng)用組件咆繁。
運(yùn)行在主線程,不能進(jìn)行耗時(shí)操作

2.Service和Thread的區(qū)別

定義

Thread是程序執(zhí)行的最小單位顶籽,Service是安卓的一種運(yùn)行機(jī)制玩般。

實(shí)際開發(fā)

Thread作耗時(shí)操作,Service運(yùn)行主線程

應(yīng)用場(chǎng)景

Service音樂(lè)礼饱,導(dǎo)航

3.Service啟動(dòng)方式

1. startService

1)定義一個(gè)類繼承Service
2)在Mainfest.xml文件中配置該Service
3)使用Context的startService(Intent)方法啟動(dòng)該Service
4)不再使用時(shí)坏为,調(diào)用stopService(Intent)方法停止該服務(wù)

2. bindService

1)創(chuàng)建BindService服務(wù)端,繼承自Service并在類中镊绪,創(chuàng)建一個(gè)實(shí)現(xiàn)IBinder接口的實(shí)例對(duì)象并提供公共方法給客戶端調(diào)用
2)從onBind()回調(diào)方法返回此Binder實(shí)例
3)在客戶端中匀伏,從onServiceConnected()回調(diào)方法中接受Binder,并使用提供的方法調(diào)用綁定服務(wù)蝴韭。

Broadcast receiver

1.廣播的定義

在安卓中够颠,Broadcast是一種廣泛運(yùn)用的在應(yīng)用程序之間傳輸信息的機(jī)制,廣播內(nèi)容是一個(gè)Intent榄鉴,這個(gè)Intent中可以攜帶我們要傳送的數(shù)據(jù)履磨。

2.廣播的使用場(chǎng)景

  • 同一個(gè)app具有多個(gè)進(jìn)程的不同組件之間的消息通信
  • 不同app之間的組件之間消息通信

3.廣播的種類

1)Normal Broadcast:Context.sendBroadcast
2)System Broadcast:Context.sendOrderedBroadcast
3)Local Broadcast:只在自身app內(nèi)傳播

4.實(shí)現(xiàn)廣播-receiver

1)靜態(tài)注冊(cè):注冊(cè)完成就一直運(yùn)行
2)動(dòng)態(tài)注冊(cè):跟隨activity的生命周期(要回收,不然會(huì)內(nèi)存泄漏)
區(qū)別:前者mainfest添加牢硅,app殺死后依然運(yùn)行蹬耘,后者代碼添加,跟隨activity的生命周期减余。

5.內(nèi)部實(shí)現(xiàn)機(jī)制

1)自定義廣播接受BroadcastReceiver综苔,并復(fù)寫onRecvice()
2)通過(guò)Binder機(jī)制向AMS進(jìn)行注冊(cè)
3)廣播發(fā)送者通過(guò)Binder機(jī)制向AMS發(fā)送廣播
4)AMS查找符合相應(yīng)條件(intentFilter/Permission)的BroadcastReceiver,將廣播發(fā)送到BroadcastReceiver(一般情況下是activity)相應(yīng)的消息循環(huán)隊(duì)列中
5)消息循環(huán)執(zhí)行拿到此廣播位岔,回調(diào)BroadcastReceiver中的onReceive()方法

5.LocalBroadcastManager詳解

1)使用它發(fā)送的廣播只在自身app中傳播如筛,因此不必?fù)?dān)心泄漏隱私數(shù)據(jù)
2)其他App無(wú)法對(duì)你的App發(fā)送該廣播,因?yàn)槟愕腁pp根本不可能接受到非自身的廣播抒抬,因此不用擔(dān)心有安全漏洞
3)比系統(tǒng)的全局廣播更加高效
注冊(cè)

protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub
       super.onCreate(savedInstanceState);
        if(savedInstanceState!=null) { 
            if(mLocalBroadcastManager!=null && mBoradCast!=null) { 
              mLocalBroadcastManager.unregisterReceiver(mBoradCast);
              mLocalBroadcastManager=null; 
              mBoradCast=null;
              }
         }
     
     mLocalBroadcastManager=LocalBroadcastManager.getInstance(this); 
     mBoradCast = new MyBroadCast(); IntentFilter intentFilter = new IntentFilter(); 
     //重點(diǎn)在這里杨刨,本地注冊(cè),本地接收擦剑。
     mLocalBroadcastManager.registerReceiver(mBoradCast, intentFilter);
}


@Override 
protected void onDestroy() { 
        super.onDestroy();
        if(mLocalBroadcastManager!=null && mBoradCast!=null) { 
           mLocalBroadcastManager.unregisterReceiver(mBoradCast); 
           mLocalBroadcastManager=null; 
          mBoradCast=null; 
        } 
}

*發(fā)送

LocalBroadcastManager lcm=LocalBroadcastManager.getInstance(mContext); 
lcm.sendBroadcast(new Intent(ACTION_LOCATION));//發(fā)送

Binder詳解

1. 相關(guān)Linux的基礎(chǔ)知識(shí)

1.1 進(jìn)程隔離/虛擬地址空間

1.2 系統(tǒng)調(diào)用

1.3 binder驅(qū)動(dòng)

2. Binder通信機(jī)制

2.1 為什么要使用binder

  • android使用的Linux內(nèi)核擁有非常多的跨進(jìn)程通信機(jī)制
  • 性能
  • 安全(雙方身份校驗(yàn))

2.2 binder通信機(jī)制

  • 通信錄:ServiceManager
  • 通信基站:binder驅(qū)動(dòng)


    binder通信機(jī)制.png
binder交互.png

2.3 到底什么是binder

  • 通常意義下妖胀,Binder指的是一種通信機(jī)制
  • 對(duì)于Server進(jìn)程來(lái)說(shuō),Binder指的是Binder本地對(duì)象
  • 對(duì)于Client進(jìn)程來(lái)說(shuō)惠勒,Binder指的是Binder代理對(duì)象
  • 對(duì)于傳輸過(guò)程而已赚抡,Binder是可以進(jìn)行跨進(jìn)程傳遞的對(duì)象

Handler詳解

什么是handler

  • 安卓消息機(jī)制的上層接口,可以用來(lái)更新ui
  • handler通過(guò)發(fā)送和處理Message和Runnable對(duì)象來(lái)關(guān)聯(lián)對(duì)應(yīng)線程的MessageQueue纠屋。
  1. 可以讓對(duì)應(yīng)的Message和Runnable在未來(lái)的某個(gè)時(shí)間點(diǎn)進(jìn)行相應(yīng)處理
  2. 讓自己想要處理的耗時(shí)操作放在子線程涂臣,讓更新ui的操作放在主線程

handler的使用方法

  1. post(runnable)
  2. sendMessage(message)

handler機(jī)制的原理

handler.png

handler發(fā)送消息,處理Looper對(duì)象售担。

handler引起的內(nèi)存泄漏以及解決辦法

原因:非靜態(tài)內(nèi)部類持有外部類的匿名引用赁遗,導(dǎo)致外部activity無(wú)法釋放
解決辦法:handler內(nèi)部持有外部activity的弱引用署辉,并把handler改為靜態(tài)內(nèi)部類,mHandler.removeCallback()

AsynkTask詳解

什么是AsynkTask

本質(zhì)上是一個(gè)封裝了線程池和handler的異步框架岩四,只能做一些耗時(shí)比較短的操作哭尝。

AsynkTask的使用方法

3個(gè)參數(shù)

5個(gè)方法
onPreExecute():做一些準(zhǔn)備工作
doInBackground():做耗時(shí)操作
onProgressUpdate():顯示進(jìn)度條的變化
onPostExecute():返回結(jié)果

AsynkTask的機(jī)制原理

  1. AsynkTask的本質(zhì)是一個(gè)靜態(tài)的線程池,AsynkTask派生出的子類可以實(shí)現(xiàn)不同的異步任務(wù)炫乓,這些任務(wù)都是提交到靜態(tài)的線程池中執(zhí)行
  2. 線程池中的工作線程執(zhí)行doInBackground(mParams)方法執(zhí)行異步任務(wù)
  3. 當(dāng)任務(wù)狀態(tài)發(fā)生改變之后刚夺,工作線程會(huì)向ui線程發(fā)送消息,AsynkTask內(nèi)部的internalHandler響應(yīng)這些消息末捣,并調(diào)用相關(guān)的回調(diào)函數(shù)侠姑。

AsynkTask的注意事項(xiàng)

  • 內(nèi)存泄漏:非靜態(tài)內(nèi)部類持有外部類的匿名引用,導(dǎo)致外部activity無(wú)法釋放箩做。
  • 生命周期:onDestory()方法中調(diào)用AsynkTask.cancel()
  • 結(jié)果丟失:屏幕旋轉(zhuǎn)莽红,activity重新創(chuàng)建等,AsynkTask會(huì)持有之前的activity的引用邦邦。
  • 并行or串行

HandlerThread的理解

HandlerThread的產(chǎn)生背景

  • 開啟Thread子線程進(jìn)行耗時(shí)操作
  • 多次創(chuàng)建和銷毀線程是很耗系統(tǒng)資源的

HandlerThread的是什么

handler+thread+looper
是一個(gè)thread內(nèi)部有l(wèi)ooper

HandlerThread的特點(diǎn)

  • 本質(zhì)上是一個(gè)線程類安吁,他繼承了Thread
  • HandlerThread有自己的內(nèi)部Looper對(duì)象,可以進(jìn)行l(wèi)ooper循環(huán)
  • 通過(guò)獲取HandlerThread的looper對(duì)象傳遞給Handler對(duì)象燃辖,可以在handlerMessage方法中執(zhí)行異步任務(wù)
  • 優(yōu)點(diǎn)是不會(huì)有堵塞鬼店,減少了對(duì)性能的消耗,缺點(diǎn)是不能同時(shí)進(jìn)行多任務(wù)的處理黔龟,需要等待進(jìn)行處理妇智,處理效率較低
  • 與線程池注重并發(fā)不同,HandlerThread是一個(gè)串行隊(duì)列氏身,HandlerThread背后只有一個(gè)線程巍棱。

IntentService的理解

IntentService是什么

  • 繼承了Service,優(yōu)先級(jí)比Service高蛋欣。
  • 它內(nèi)部通過(guò)HandlerThread和Handler實(shí)現(xiàn)異步操作
  • IntentService是繼承并處理異步請(qǐng)求的一個(gè)類航徙,在IntentService內(nèi)有一個(gè)工作線程來(lái)處理耗時(shí)操作,啟動(dòng)IntentService的方式和啟動(dòng)傳統(tǒng)的Service一樣陷虎,同時(shí)到踏,當(dāng)任務(wù)執(zhí)行完后,IntentService會(huì)自動(dòng)停止尚猿,而不需要我們手動(dòng)去控制或stopSelf()窝稿。另外,可以啟動(dòng)IntentService多次谊路,而每一個(gè)耗時(shí)操作會(huì)以工作隊(duì)列的方式在IntentService的onHandlerIntent回調(diào)方法中執(zhí)行,并且菩彬,每次只執(zhí)行一個(gè)工作線程缠劝,執(zhí)行完一個(gè)再執(zhí)行第二個(gè)潮梯。

如何使用IntentService

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末昼钻,一起剝皮案震驚了整個(gè)濱河市取刃,隨后出現(xiàn)的幾起案子绞绒,更是在濱河造成了極大的恐慌壕翩,老刑警劉巖描扯,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纵柿,死亡現(xiàn)場(chǎng)離奇詭異却汉,居然都是意外死亡廊酣,警方通過(guò)查閱死者的電腦和手機(jī)锉罐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門帆竹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人脓规,你說(shuō)我怎么就攤上這事栽连。” “怎么了侨舆?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵秒紧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我挨下,道長(zhǎng)熔恢,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任臭笆,我火速辦了婚禮叙淌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘耗啦。我一直安慰自己凿菩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布帜讲。 她就那樣靜靜地躺著衅谷,像睡著了一般。 火紅的嫁衣襯著肌膚如雪似将。 梳的紋絲不亂的頭發(fā)上获黔,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音在验,去河邊找鬼玷氏。 笑死,一個(gè)胖子當(dāng)著我的面吹牛腋舌,可吹牛的內(nèi)容都是我干的盏触。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赞辩!你這毒婦竟也來(lái)了雌芽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤辨嗽,失蹤者是張志新(化名)和其女友劉穎世落,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體糟需,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屉佳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洲押。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片武花。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖诅诱,靈堂內(nèi)的尸體忽然破棺而出髓堪,到底是詐尸還是另有隱情,我是刑警寧澤娘荡,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布干旁,位于F島的核電站,受9級(jí)特大地震影響炮沐,放射性物質(zhì)發(fā)生泄漏争群。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一大年、第九天 我趴在偏房一處隱蔽的房頂上張望换薄。 院中可真熱鬧,春花似錦翔试、人聲如沸轻要。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)冲泥。三九已至,卻和暖如春壁涎,著一層夾襖步出監(jiān)牢的瞬間凡恍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工怔球, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嚼酝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓竟坛,卻偏偏與公主長(zhǎng)得像闽巩,于是被迫代替她去往敵國(guó)和親钧舌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 面試必背 會(huì)舍棄涎跨、總結(jié)概括——根據(jù)我這些年面試和看面試題搜集過(guò)來(lái)的知識(shí)點(diǎn)匯總而來(lái) 建議根據(jù)我的寫的面試應(yīng)對(duì)思路中的...
    luoyangzk閱讀 6,755評(píng)論 6 173
  • 最近剛從舊公司離職延刘,為面試在做準(zhǔn)備,因?yàn)槠綍r(shí)開發(fā)CV大法用得比較多六敬,很多基礎(chǔ)知識(shí)掌握得不是很牢靠以及很多工具框架只...
    黎清海閱讀 2,186評(píng)論 1 19
  • 在各種Android項(xiàng)目中外构,我們不可避免要使用到Fragment,但很多地方其實(shí)我們只是習(xí)慣性或copy代碼來(lái)使用...
    HolenZhou閱讀 2,086評(píng)論 1 15
  • 每個(gè)人都是有記憶的播掷,只是記憶的長(zhǎng)度和寬度不一樣的审编,因?yàn)榻?jīng)歷不同,所以記憶里的內(nèi)容是千差萬(wàn)別歧匈。 小時(shí)候看書上說(shuō)的的那...
    稻草稻草和麥田閱讀 549評(píng)論 7 4
  • 本想一直佛系生活垒酬,不慕虛榮,不求福貴件炉,不拼命不努力勘究,生活儉樸,簡(jiǎn)簡(jiǎn)單單的過(guò)最平凡的日子斟冕】诟猓可是某一天就極盡失落,感覺(jué)...
    許哄哄閱讀 229評(píng)論 2 2