溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android中高級面試題有哪些

發布時間:2022-01-12 11:04:41 來源:億速云 閱讀:149 作者:iii 欄目:移動開發

今天小編給大家分享一下android中高級面試題有哪些的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

1、Activity生命周期?

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onDetroy()

2、Service生命周期?

service 啟動方式有兩種
一種是通過startService()方式進行啟動
另一種是通過bindService()方式進行啟動。
不同的啟動方式他們的生命周期是不一樣.

通過startService()這種方式啟動的service
生命周期是這樣:
調用startService() --> onCreate()--> onStartConmon()--> onDestroy()。
這種方式啟動的話,需要注意一下幾個問題
第一:當我們通過startService被調用以后,多次在調用startService(),onCreate()方法也只會被調用一次,而onStartConmon()會被多次調用,當我們調用stopService()的時候,onDestroy()就會被調用,從而銷毀服務。
第二:當我們通過startService啟動時候,通過intent傳值,在onStartConmon()方法中獲取值的時候,一定要先判斷intent是否為null。

通過bindService()方式進行綁定,這種方式綁定service
生命周期:
bindService-->onCreate()-->onBind()-->unBind()-->onDestroy()
bindservice這種方式進行啟動service好處是更加便利activity中操作service,如果要在activity中調用,在需要在activity獲取ServiceConnection對象,通過ServiceConnection來獲取service中內部類的類對象,然后通過這個類對象就可以調用類中的方法,當然這個類需要繼承Binder對象

3、Activity的啟動過程(不要回答生命周期)
4、Broadcast注冊方式與區別

此處延伸:什么情況下用動態注冊

Broadcast廣播,注冊方式主要有兩種.
第一種是靜態注冊,也可成為常駐型廣播,這種廣播需要在Androidmanifest.xml中進行注冊,這中方式注冊的廣播,不受頁面生命周期的影響,即使退出了頁面,也可以收到廣播這種廣播一般用于想開機自啟動啊等等,由于這種注冊的方式的廣播是常駐型廣播,所以會占用CPU的資源。

第二種是動態注冊,而動態注冊的話,是在代碼中注冊的,這種注冊方式也叫非常駐型廣播,受到生命周期的影響,退出頁面后,就不會收到廣播,我們通常運用在更新UI方面。這種注冊方式優先級較高。最后需要解綁,否會會內存泄露

廣播是分為有序廣播和無序廣播。

5、HttpClient與HttpUrlConnection的區別

此處延伸:Volley里用的哪種請求方式

首先HttpClientHttpUrlConnection這兩種方式都支持Https協議,都是以流的形式進行上傳或者下載數據,也可以說是以流的形式進行數據的傳輸,還有ipv6,以及連接池等功能。HttpClient這個擁有非常多的API,所以如果想要進行擴展的話,并且不破壞它的兼容性的話,很難進行擴展,也就是這個原因,GoogleAndroid6.0的時候,直接就棄用了這個HttpClient.

HttpUrlConnection相對來說就是比較輕量級了,API比較少,容易擴展,并且能夠滿足Android大部分的數據傳輸。比較經典的一個框架volley,在Android 2.3版本以前都是使用Android HttpClient,在Android 2.3以后就使用了HttpUrlConnection

6、java虛擬機和Dalvik虛擬機的區別

Java虛擬機:
1、java虛擬機基于棧。
基于棧的機器必須使用指令來載入和操作棧上數據,所需指令更多更多。
2、java虛擬機運行的是java字節碼。
java類會被編譯成一個或多個字節碼.class文件.

Dalvik虛擬機:
1、dalvik虛擬機是基于寄存器的
2、Dalvik運行的是自定義的.dex字節碼格式。
java類被編譯成.class文件后,會通過一個dx工具將所有的.class文件轉換成一個.dex文件,然后dalvik虛擬機會從其中讀取指令和數據.
3、常量池已被修改為只使用32位的索引,以 簡化解釋器。
4、一個應用,一個虛擬機實例,一個進程
所有android應用的線程都是對應一個linux線程,都運行在自己的沙盒中,不同的應用在不同的進程中運行。每個android dalvik應用程序都被賦予了一個獨立的linux PID(app_*)

7、進程?;睿ú凰肋M程)
8、講解一下Context
9、理解Activity,View,Window三者關系
10、四種LaunchMode及其使用場景
11、View的繪制流程
12、View,ViewGroup事件分發
13、保存Activity狀態

onSaveInstanceState(Bundle)會在activity轉入后臺狀態之前被調用,也就是onStop()方法之前,onPause方法之后被調用;

14、Android中的幾種動畫

幀動畫:
指通過指定每一幀的圖片和播放時間,有序的進行播放而形成動畫效果,比如想聽的律動條。

補間動畫:
指通過指定View的初始狀態、變化時間、方式,通過一系列的算法去進行圖形變換,從而形成動畫效果,主要有Alpha、Scale、Translate、Rotate四種效果。
注意:只是在視圖層實現了動畫效果,并沒有真正改變View的屬性,比如滑動列表,改變標題欄的透明度。

屬性動畫:
Android3.0的時候才支持,通過不斷的改變View的屬性,不斷的重繪而形成動畫效果。相比于視圖動畫,View的屬性是真正改變了。比如view的旋轉,放大,縮小。

15、Android中跨進程通訊的幾種方式

Android跨進程通信,像intent,contentProvider,廣播,service都可以跨進程通信。

intent:
這種跨進程方式并不是訪問內存的形式,它需要傳遞一個uri,比如說打電話。

contentProvider:
這種形式,是使用數據共享的形式進行數據共享。

service:
遠程服務,比如aidl

廣播:
廣播 包含靜態廣播,動態廣播。

16、AIDL理解
17、Handler的原理

Android中主線程是不能進行耗時操作的,子線程是不能進行更新UI的。所以就有了handler,它的作用就是實現線程之間的通信。

handler整個流程中,主要有四個對象,
handler,Message,MessageQueue,Looper。當應用創建的時候,就會在主線程中創建handler對象,

我們通過要傳送的消息保存到Message中,handler通過調用sendMessage方法將Message發送到MessageQueue中,Looper對象就會不斷的調用loop()方法

不斷的從MessageQueue中取出Message交給handler進行處理。從而實現線程之間的通信。

18、Binder機制原理

Android系統的Binder機制中,是有Client,Service,ServiceManager,Binder驅動程序組成的,其中Client,service,Service Manager運行在用戶空間,Binder驅動程序是運行在內核空間的。而Binder就是把這4種組件粘合在一塊的粘合劑,其中核心的組件就是Binder驅動程序,Service Manager提供輔助管理的功能,而ClientService正是在Binder驅動程序和Service Manager提供的基礎設施上實現C/S之間的通信。其中Binder驅動程序提供設備文件/dev/binder與用戶控件進行交互,Client、Service,Service Manager通過openioctl文件操作相應的方法與Binder驅動程序進行通信。而ClientService之間的進程間通信是通過Binder驅動程序間接實現的。而Binder Manager是一個守護進程,用來管理Service,并向Client提供查詢Service接口的能力。

19、熱修復的原理

我們知道 Java虛擬機 —— JVM是加載類的class文件的,而Android虛擬機——Dalvik/ART VM是加載類的dex文件,而他們加載類的時候都需要ClassLoader,ClassLoader有一個子BaseDexClassLoader,而BaseDexClassLoader下有一個數組——DexPathList,是用來存放dex文件,當BaseDexClassLoader通過調用findClass方法時,實際上就是遍歷數組,找到相應的dex文件,找到,則直接將它return。而熱修復的解決方法就是將新的dex添加到該集合中,并且是在舊的dex的前面,所以就會優先被取出來并且return返回。
`

20、Android內存泄露及管理
22、Android UI適配

字體使用sp,
dp,多使用match_parent,wrap_content,weight
圖片資源,不同圖片的的分辨率,放在相應的文件夾下可使用百分比代替。

23、app優化
21、Fragment與Fragment、Activity通信的方式
24、圖片優化

(1)對圖片本身進行操作。
盡量不要使用setImageBitmap、setImageResource、BitmapFactory.decodeResource來設置一張大圖,因為這些方法在完成decode后,最終都是通過 java 層的 createBitmap來完成的,需要消耗更多內存.
(2)圖片進行縮放的比例,SDK中建議其值是2的指數值,值越大會導致圖片不清晰。
(3)不用的圖片記得調用圖片的recycle()方法

25、HybridApp WebView和JS交互
26、JAVA GC原理

垃圾收集算法的核心思想是:
對虛擬機可用內存空間,即堆空間中的對象進行識別,如果對象正在被引用,那么稱其為存活對象,反之,如果對象不再被引用,則為垃圾對象,可以回收其占據的空間,用于再分配。垃圾收集算法的選擇和垃圾收集系統參數的合理調節直接影響著系統性能。

27、ANR

ANR全名Application Not Responding, 也就是"應用無響應". 當操作在一段時間內系統無法處理時, 系統層面會彈出上圖那樣的ANR對話框.

產生原因:
(1)5s內無法響應用戶輸入事件(例如鍵盤輸入, 觸摸屏幕等).
(2)BroadcastReceiver在10s內無法結束
(3)Service 20s內無法結束(低概率)

解決方式:
(1)不要在主線程中做耗時的操作,而應放在子線程中來實現。如onCreate()和onResume()里盡可能少的去做創建操作。
(2)應用程序應該避免在BroadcastReceiver里做耗時的操作或計算。
(3)避免在Intent Receiver里啟動一個Activity,因為它會創建一個新的畫面,并從當前用戶正在運行的程序上搶奪焦點。
(4)service是運行在主線程的,所以在service中做耗時操作,必須要放在子線程中。

28、設計模式
29、Xutils, OKhttp, Volley, Retrofit對比
30、MVP,MVC,MVVM
31、JNI

(1)安裝和下載Cygwin,下載 Android NDK
(2)在ndk項目中JNI接口的設計
(3)使用C/C++實現本地方法
(4)JNI生成動態鏈接庫.so文件
(5)將動態鏈接庫復制到java工程,在java工程中調用,運行java工程即可

32、RecyclerView和ListView的區別

RecyclerView可以完成ListView,GridView的效果,還可以完成瀑布流的效果。同時還可以設置列表的滾動方向(垂直或者水平);
RecyclerViewview的復用不需要開發者自己寫代碼,系統已經幫封裝完成了。
RecyclerView可以進行局部刷新。
RecyclerView提供了API來實現item的動畫效果。

在性能上:
如果需要頻繁的刷新數據,需要添加動畫,則RecyclerView有較大的優勢。
如果只是作為列表展示,則兩者區別并不是很大。

以上就是“android中高級面試題有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女