九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Android面試常問的技術(shù)問題

面試時(shí)技術(shù)經(jīng)理會(huì)問你一些工作中遇到的Android方面的問題,談?wù)勀闼龅捻?xiàng)目,和在項(xiàng)目中所扮演的角色。

更多內(nèi)容請(qǐng)參考我的博客:點(diǎn)擊打開鏈接


1.如何優(yōu)化ListView?
①Item布局,層級(jí)越少越好,使用hierarchyview工具查看優(yōu)化。
②復(fù)用convertView點(diǎn)擊打開鏈接
③使用ViewHolder
④item中有圖片時(shí),異步加載
⑤快速滑動(dòng)時(shí),不加載圖片
⑥item中有圖片時(shí),應(yīng)對(duì)圖片進(jìn)行適當(dāng)壓縮
⑦實(shí)現(xiàn)數(shù)據(jù)的分頁加載

2.對(duì)于Android 的安全問題?
①錯(cuò)誤導(dǎo)出組件
② 參數(shù)校驗(yàn)不嚴(yán)
③WebView引入各種安全問題,webview中的js注入
④不混淆、不防二次打包
⑤明文存儲(chǔ)關(guān)鍵信息
⑦ 錯(cuò)誤使用HTTPS

⑧山寨加密方法

⑨濫用權(quán)限、內(nèi)存泄露、使用debug簽名

3. 如何縮減APK包大???

代碼
保持良好的編程習(xí)慣,不要重復(fù)或者不用的代碼,謹(jǐn)慎添加libs,移除使用不到的libs。
使用proguard混淆代碼,它會(huì)對(duì)不用的代碼做優(yōu)化,并且混淆后也能夠減少安裝包的大小。
native code的部分,大多數(shù)情況下只需要支持armabi與x86的架構(gòu)即可。如果非必須,可以考慮拿掉x86的部分。。
資源
使用Lint工具查找沒有使用到的資源。去除不使用的圖片,String,XML等等。 assets目錄下的資源請(qǐng)確保沒有用不上的文件。
生成APK的時(shí)候,aapt工具本身會(huì)對(duì)png做優(yōu)化,但是在此之前還可以使用其他工具如tinypng對(duì)圖片進(jìn)行進(jìn)一步的壓縮預(yù)處理。
jpeg還是png,根據(jù)需要做選擇,在某些時(shí)候jpeg可以減少圖片的體積。 對(duì)于9.png的圖片,可拉伸區(qū)域盡量切小,另外可以通過使用9.png拉伸達(dá)到大圖效果的時(shí)候盡量不要使用整張大圖。
策略
有選擇性的提供hdpi,xhdpi,xxhdpi的圖片資源。建議優(yōu)先提供xhdpi的圖片,對(duì)于mdpi,ldpi與xxxhdpi根據(jù)需要提供有差異的部分即可。
盡可能的重用已有的圖片資源。例如對(duì)稱的圖片,只需要提供一張,另外一張圖片可以通過代碼旋轉(zhuǎn)的方式實(shí)現(xiàn)。
能用代碼繪制實(shí)現(xiàn)的功能,盡量不要使用大量的圖片。例如減少使用多張圖片組成animate-list的AnimationDrawable,這種方式提供了多張圖片很占空間。

4.Android與服務(wù)器交互的方式中的對(duì)稱加密和非對(duì)稱加密是什么?
對(duì)稱加密,就是加密和解密數(shù)據(jù)都是使用同一個(gè)key,這方面的算法有DES。
非對(duì)稱加密,加密和解密是使用不同的key。發(fā)送數(shù)據(jù)之前要先和服務(wù)端約定生成公鑰和私鑰,使用公鑰加密的數(shù)據(jù)可以用私鑰解密,反之。這方面的算法有RSA。ssh 和 ssl都是典型的非對(duì)稱加密。

5.設(shè)備橫豎屏切換的時(shí)候,接下來會(huì)發(fā)生什么?
1、不設(shè)置Activity的android:configChanges時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次
2、設(shè)置Activity的android:configChanges=”orientation”時(shí),切屏還是會(huì)重新調(diào)用各個(gè)生命周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次
3、設(shè)置Activity的android:configChanges=”orientation|keyboardHidden”時(shí),切屏不會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行onConfigurationChanged方法

6.Android啟動(dòng)Service的兩種方式是什么? 它們的適用情況是什么?
如果后臺(tái)服務(wù)開始后基本可以獨(dú)立運(yùn)行的話,可以用startService。音樂播放器就可以這樣用。它們會(huì)一直運(yùn)行直到你調(diào)用 stopSelf或者stopService。你可以通過發(fā)送Intent或者接收Intent來與正在運(yùn)行的后臺(tái)服務(wù)通信,但大部分時(shí)間,你只是啟動(dòng)服務(wù)并讓它獨(dú)立運(yùn)行。如果你需要與后臺(tái)服務(wù)通過一個(gè)持續(xù)的連接來比較頻繁地通信,建議使用bind()。比如你需要定位服務(wù)不停地把更新后的地理位置傳給UI。Binder比Intent開發(fā)起來復(fù)雜一些,但如果真的需要,你也只能使用它。
startService:生命周期與調(diào)用者不同。啟動(dòng)后若調(diào)用者未調(diào)用stopService而直接退出,Service仍會(huì)運(yùn)行
bindService:生命周期與調(diào)用者綁定,調(diào)用者一旦退出,Service就會(huì)調(diào)用unBind->onDestroy

7.談?wù)勀銓?duì)Android中Context的理解?
Context:包含上下文信息(外部值) 的一個(gè)參數(shù). Android 中的 Context 分三種,Application Context ,Activity Context ,Service Context.
它描述的是一個(gè)應(yīng)用程序環(huán)境的信息,通過它我們可以獲取應(yīng)用程序的資源和類,也包括一些應(yīng)用級(jí)別操作,例如:?jiǎn)?dòng)一個(gè)Activity,發(fā)送廣播,接受Intent信息等

8.Service的onCreate回調(diào)在UI線程中嗎?
Service生命周期的各個(gè)回調(diào)和其他的應(yīng)用組件一樣,是跑在主線程中,會(huì)影響到你的UI操作或者阻塞主線程中的其他事情

9.請(qǐng)介紹下AsyncTask的內(nèi)部實(shí)現(xiàn),適用的場(chǎng)景是?

AsyncTask內(nèi)部也是Handler機(jī)制來完成的,只不過Android提供了執(zhí)行框架來提供線程池來執(zhí)行相應(yīng)地任務(wù),因?yàn)榫€程池的大小問題,所以AsyncTask只應(yīng)該用來執(zhí)行耗時(shí)時(shí)間較短的任務(wù),比如HTTP請(qǐng)求,大規(guī)模的下載和數(shù)據(jù)庫的更改不適用于AsyncTask,因?yàn)闀?huì)導(dǎo)致線程池堵塞,沒有線程來執(zhí)行其他的任務(wù),導(dǎo)致的情形是會(huì)發(fā)生AsyncTask根本執(zhí)行不了的問題

  參考我的博客:點(diǎn)擊打開鏈接

10.談?wù)勀銓?duì)binder機(jī)制的理解?
binder是一種IPC機(jī)制,進(jìn)程間通訊的一種工具.
Java層可以利用aidl工具來實(shí)現(xiàn)相應(yīng)的接口.

11.Android中進(jìn)程間通信有哪些實(shí)現(xiàn)方式?
Intent,Binder(AIDL),Messenger,BroadcastReceiver

12.介紹下實(shí)現(xiàn)一個(gè)自定義view的基本流程
1、自定義View的屬性 編寫attr.xml文件
2、在layout布局文件中引用,同時(shí)引用命名空間
3、在View的構(gòu)造方法中獲得我們自定義的屬性 ,在自定義控件中進(jìn)行讀?。?gòu)造方法拿到attr.xml文件值)
4、重寫onMesure
5、重寫onDraw

13.Android中touch事件的傳遞機(jī)制是怎樣的?
1.Touch事件傳遞的相關(guān)API有dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent
2.Touch事件相關(guān)的類有View、ViewGroup、Activity
3.Touch事件會(huì)被封裝成MotionEvent對(duì)象,該對(duì)象封裝了手勢(shì)按下、移動(dòng)、松開等動(dòng)作
4.Touch事件通常從Activity#dispatchTouchEvent發(fā)出,只要沒有被消費(fèi),會(huì)一直往下傳遞,到最底層的View。
5.如果Touch事件傳遞到的每個(gè)View都不消費(fèi)事件,那么Touch事件會(huì)反向向上傳遞,最終交由Activity#onTouchEvent處理.
6.onInterceptTouchEvent為ViewGroup特有,可以攔截事件.
7.Down事件到來時(shí),如果一個(gè)View沒有消費(fèi)該事件,那么后續(xù)的MOVE/UP事件都不會(huì)再給它

14.Android多線程的實(shí)現(xiàn)方式有哪些?
Thread & AsyncTask
Thread 可以與Loop 和 Handler 共用建立消息處理隊(duì)列
AsyncTask 可以作為線程池并行處理多任務(wù)

15.Android開發(fā)中何時(shí)使用多進(jìn)程?使用多進(jìn)程的好處是什么?
要想知道如何使用多進(jìn)程,先要知道Android里的多進(jìn)程概念。一般情況下,一個(gè)應(yīng)用程序就是一個(gè)進(jìn)程,這個(gè)進(jìn)程名稱就是應(yīng)用程序包名。我們知道進(jìn)程是系統(tǒng)分配資源和調(diào)度的基本單位,所以每個(gè)進(jìn)程都有自己獨(dú)立的資源和內(nèi)存空間,別的進(jìn)程是不能任意訪問其他進(jìn)程的內(nèi)存和資源的。。
1.那如何讓自己的應(yīng)用擁有多個(gè)進(jìn)程?
很簡(jiǎn)單,我們的四大組件在AndroidManifest文件中注冊(cè)的時(shí)候,有個(gè)屬性是android:process,1.這里可以指定組件的所處的進(jìn)程。默認(rèn)就是應(yīng)用的主進(jìn)程。指定為別的進(jìn)程之后,系統(tǒng)在啟動(dòng)這個(gè)組件的時(shí)候,就先創(chuàng)建(如果還沒創(chuàng)建的話)這個(gè)進(jìn)程,然后再創(chuàng)建該組件。你可以重載Application類的onCreate方法,打印出它的進(jìn)程名稱,就可以清楚的看見了。再設(shè)置android:process屬性時(shí)候,有個(gè)地方需要注意:如果是android:process=”:deamon”,以:開頭的名字,則表示這是一個(gè)應(yīng)用程序的私有進(jìn)程,否則它是一個(gè)全局進(jìn)程。私有進(jìn)程的進(jìn)程名稱是會(huì)在冒號(hào)前自動(dòng)加上包名,而全局進(jìn)程則不會(huì)。一般我們都是有私有進(jìn)程,很少使用全局進(jìn)程。他們的具體區(qū)別不知道有沒有誰能補(bǔ)充一下。

2.使用多進(jìn)程顯而易見的好處就是分擔(dān)主進(jìn)程的內(nèi)存壓力。我們的應(yīng)用越做越大,內(nèi)存越來越多,將一些獨(dú)立的組件放到不同的進(jìn)程,它就不占用主進(jìn)程的內(nèi)存空間了。當(dāng)然還有其他好處,有心人會(huì)發(fā)現(xiàn)Android后臺(tái)進(jìn)程里有很多應(yīng)用是多個(gè)進(jìn)程的,因?yàn)樗鼈円qv后臺(tái),特別是即時(shí)通訊或者社交應(yīng)用,不過現(xiàn)在多進(jìn)程已經(jīng)被用爛了。典型用法是在啟動(dòng)一個(gè)不可見的輕量級(jí)私有進(jìn)程,在后臺(tái)收發(fā)消息,或者做一些耗時(shí)的事情,或者開機(jī)啟動(dòng)這個(gè)進(jìn)程,然后做監(jiān)聽等。還有就是防止主進(jìn)程被殺守護(hù)進(jìn)程,守護(hù)進(jìn)程和主進(jìn)程之間相互監(jiān)視,有一方被殺就重新啟動(dòng)它。應(yīng)該還有還有其他好處,這里就不多說了。

3.壞處的話,多占用了系統(tǒng)的空間,大家都這么用的話系統(tǒng)內(nèi)存很容易占滿而導(dǎo)致卡頓。消耗用戶的電量。應(yīng)用程序架構(gòu)會(huì)變復(fù)雜,應(yīng)為要處理多進(jìn)程之間的通信。這里又是另外一個(gè)問題了。

16.ANR是什么?怎樣避免和解決ANR?
ANR:Application Not Responding,即應(yīng)用無響應(yīng)
ANR一般有三種類型:
1:KeyDispatchTimeout(5 seconds) –主要類型
按鍵或觸摸事件在特定時(shí)間內(nèi)無響應(yīng)

2:BroadcastTimeout(10 seconds)
BroadcastReceiver在特定時(shí)間內(nèi)無法處理完成

3:ServiceTimeout(20 seconds) –小概率類型
Service在特定的時(shí)間內(nèi)無法處理完成超時(shí)的原因一般有兩種:
(1)當(dāng)前的事件沒有機(jī)會(huì)得到處理(UI線程正在處理前一個(gè)事件沒有及時(shí)完成或者looper被某種原因阻塞?。?br>(2)當(dāng)前的事件正在處理,但沒有及時(shí)完成

UI線程盡量只做跟UI相關(guān)的工作,耗時(shí)的工作(數(shù)據(jù)庫操作,I/O,連接網(wǎng)絡(luò)或者其他可能阻礙UI線程的操作)放入單獨(dú)的線程處理,盡量用Handler來處理UI thread和thread之間的交互。

UI線程主要包括如下:
Activity:onCreate(), onResume(), onDestroy(), onKeyDown(), onClick()
AsyncTask: onPreExecute(), onProgressUpdate(), onPostExecute(), onCancel()
Mainthread handler: handleMessage(), post(runnable r)
other

17.Android下解決滑動(dòng)沖突的常見思路是什么?
相關(guān)的滑動(dòng)組件 重寫onInterceptTouchEvent,然后判斷根據(jù)xy值,來決定是否要攔截當(dāng)前操作

18.如何把一個(gè)應(yīng)用設(shè)置為系統(tǒng)應(yīng)用?
成為系統(tǒng)應(yīng)用,首先要在 對(duì)應(yīng)設(shè)備的 Android 源碼 SDK 下編譯,編譯好之后:
此 Android 設(shè)備是 Debug 版本,并且已經(jīng) root,直接將此 apk 用 adb 工具 push 到 system/app 或 system/priv-app 下即可。
如果非 root 設(shè)備,需要編譯后重新燒寫設(shè)備鏡像即可。

有些權(quán)限(如 WRITE_SECURE_SETTINGS ),是不開放給第三方應(yīng)用的,只能在對(duì)應(yīng)設(shè)備源碼中編譯然后作為系統(tǒng) app 使用。

19、Android內(nèi)存泄露研究
Android內(nèi)存泄漏指的是進(jìn)程中某些對(duì)象(垃圾對(duì)象)已經(jīng)沒有使用價(jià)值了,但是它們卻可以直接或間接地引用到gc roots導(dǎo)致無法被GC回收。無用的對(duì)象占據(jù)著內(nèi)存空間,使得實(shí)際可使用內(nèi)存變小,形象地說法就是內(nèi)存泄漏了。。
場(chǎng)景
類的靜態(tài)變量持有大數(shù)據(jù)對(duì)象
靜態(tài)變量長期維持到大數(shù)據(jù)對(duì)象的引用,阻止垃圾回收。
非靜態(tài)內(nèi)部類的靜態(tài)實(shí)例
非靜態(tài)內(nèi)部類會(huì)維持一個(gè)到外部類實(shí)例的引用,如果非靜態(tài)內(nèi)部類的實(shí)例是靜態(tài)的,就會(huì)間接長期維持著外部類的引用,阻止被回收掉。。
資源對(duì)象未關(guān)閉
資源性對(duì)象如Cursor、File、Socket,應(yīng)該在使用后及時(shí)關(guān)閉。未在finally中關(guān)閉,會(huì)導(dǎo)致異常情況下資源對(duì)象未被釋放的隱患。
注冊(cè)對(duì)象未反注冊(cè)
未反注冊(cè)會(huì)導(dǎo)致觀察者列表里維持著對(duì)象的引用,阻止垃圾回收。
Handler臨時(shí)性內(nèi)存泄露
Handler通過發(fā)送Message與主線程交互,Message發(fā)出之后是存儲(chǔ)在MessageQueue中的,有些Message也不是馬上就被處理的。在Message中存在一個(gè) target,是Handler的一個(gè)引用,如果Message在Queue中存在的時(shí)間越長,就會(huì)導(dǎo)致Handler無法被回收。如果Handler是非靜態(tài)的,則會(huì)導(dǎo)致Activity或者Service不會(huì)被回收。
由于AsyncTask內(nèi)部也是Handler機(jī)制,同樣存在內(nèi)存泄漏的風(fēng)險(xiǎn)。
此種內(nèi)存泄露,一般是臨時(shí)性的。

20.內(nèi)存泄露檢測(cè)有什么好方法?
檢測(cè):
1、DDMS Heap發(fā)現(xiàn)內(nèi)存泄露
dataObject totalSize的大小,是否穩(wěn)定在一個(gè)范圍內(nèi),如果操作程序,不斷增加,說明內(nèi)存泄露
2、使用Heap Tool進(jìn)行內(nèi)存快照前后對(duì)比
BlankActivity手動(dòng)觸發(fā)GC進(jìn)行前后對(duì)比,對(duì)象是否被及時(shí)回收

定位:
1、MAT插件打開.hprof具體定位內(nèi)存泄露:
查看histogram項(xiàng),選中某一個(gè)對(duì)象,查看它的GC引用鏈,因?yàn)榇嬖贕C引用鏈的,說明無法回收
2、AndroidStudio的Allocation Tracker:
觀測(cè)到期間的內(nèi)存分配,哪些對(duì)象被創(chuàng)建,什么時(shí)候創(chuàng)建,從而準(zhǔn)確定位

21:多進(jìn)程應(yīng)該能為我們帶來什么呢

  android平臺(tái)對(duì)應(yīng)用都有內(nèi)存限制,其實(shí)這個(gè)理解有點(diǎn)問題,應(yīng)該是說android平臺(tái)對(duì)每個(gè)進(jìn)程有內(nèi)存限制,比如某機(jī)型對(duì)對(duì)進(jìn)程限制是24m,如果應(yīng)用有兩個(gè)進(jìn)程,則該應(yīng)該的總內(nèi)存限制是2*24m。使用多進(jìn)程就可以使得我們一個(gè)apk所使用的內(nèi)存限制加大幾倍。所以可以借此圖片平臺(tái)對(duì)應(yīng)用的內(nèi)存限制,比如一些要對(duì)圖片、視頻、大文件進(jìn)程處理的好內(nèi)存的應(yīng)用可以考慮用多進(jìn)程來解決應(yīng)用操作不流暢問題。





本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android 面試精華題目總結(jié)
Android的進(jìn)程,線程模型
有關(guān)Android線程的學(xué)習(xí)
AsyncTask和Handler兩種異步方式的實(shí)現(xiàn)和區(qū)別比較
3.7 AnsyncTask異步任務(wù)
10 條提升 Android 性能的建議
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服