Android面試題

Java中的String類可以被繼承么?

答:不能,因為它是一個final類,同樣的還有Integer,Float,Boolean,Byte,Character,Long,Short等等,也就是說,所有基本類型的包裝類都是final類,無法被繼承或修改

如何安全的退出一個已經開啟多個activity的APP

答:在Application中持有一個全局的集合(List),進而在其onCreate()方法添加到這個集合,最終遍歷所有的activcity并finish。
ActivityCompat.finishAffinity(this);

簡單的概敘下Handler?

答:andriod提供了Handler 和 Looper 來滿足線程間的通信。Handler先進先出原則。Looper類用來管理特定線程內對象之間的消息交換
1)Looper: 一個線程可以產生一個Looper對象,由它來管理此線程里的MessageQueue(消息隊列)。
2)Handler: 你可以構造Handler對象來與Looper溝通,以便push新消息到MessageQueue里;或者接收Looper從Message Queue取出)所送來的消息。

  1. Message Queue(消息隊列):用來存放線程放入的消息。
    4)線程:UIthread 通常就是main thread,而Android啟動程序時會替它建立一個MessageQueue。

文件的上傳?

答:使用HttpURLConnection得到輸入流,將文件的通過IO流的方式上傳到服務器。可使用第三方Xutils框架。

ListView的源碼和如何優化Listview?

答:根據ConvertView來判斷View的重用還是新建,新建的話通過ViewHolder來存儲所有的控件并設置到View的Tag中有利于下次的復用。

AIDL原理?

答:AIDL是一個縮寫,全稱是Android Interface Definition Language,也就是Android接口定義語言。
實現進程間通信,尤其是在涉及多進程并發情況下的進程間通信,我們可以通過AIDL來制定一些規則,規定它們能進行哪些交流。
通過接口的方式創建AIDL文件的后綴是 .aidl,而不是 .java。
創建一個類實現剛才那個aidl的接口,通過預先定義的接口達到兩個進程內部通信進程的目的,在Service中Aidl返回一個Binder對象。

Binder機制

Binder是Android的系統進程通許方式之一簡稱IPC
Binder使用Clinet->Server通訊方式,Binder框架定義的四個角色,Server,Client,ServiceManager,以及Binder驅動,其中Server,Client,ServiceManager運行于用戶空間,驅動運行于內核空間,Binder驅動程序提供Dev/binder與用戶空間交互,Server,Client,ServiceManager,通過open和ioctl文件操作函數和Binder交互。
深入理解Binder機制

TCP和UDP的區別,tcp如何保證可靠的,丟包如何處理?

TCP面向連接,三次握手,發送需要確定以鏈接狀態(如打電話),輯通信信道是全雙工的可靠信道
UDP無連接,發送數據無需確定是否連接(如郵差),則是不可靠信道
將文件分塊發送,接收端每收到一塊數據就發送一個收到確認給發送方(包括收到的數據長度)
發送方在收到接收方發送的“收到確認”后才接著發送下一塊數據。。。。
直到整個文件發送完畢。
每塊數據都加一個包頭,里面可以包含一些標志信息,如:是否所有數據發送完畢(即最后一個包了)
三次握手簡單的說就是:(C:客戶端,S:服務端)
C:SYN到S 客戶端發送SYN(SEQ=1022)報文給服務器端,客戶端進入SYN_SEND狀態
S:如成功--返回給C(SYN+ACK),回應一個SYN (SEQ=2032)ACK(ACK=1022+1)報文,服務器段進入SYN_RECV狀態。
C:如成功---返回給S(ACK) 客戶端收到服務器端的SYN報文,回應一個ACK(ACK=2032+1)報文,進入Established狀態。

什么是三級緩存?三級緩存原理

答:網絡加載,不優先加載,速度慢,浪費流量
本地緩存,次優先加載,速度快
內存緩存,優先加載,速度最快
首次加載 Android App 時,肯定要通過網絡交互來獲取圖片,之后我們可以將圖片保存至本地SD卡和內存中
之后運行 App 時,優先訪問內存中的圖片緩存,若內存中沒有,則加載本地SD卡中的圖片,最后選擇訪問網絡。

Service的兩種啟動方法,有什么區別 ?

答:1.在Context中通過public boolean bindService(Intent service,ServiceConnection conn,int flags) 方法來進行Service與Context的關聯并啟動,并且Service的生命周期依附于Context(不求同時同分同秒生!但求同時同分同秒屎!!)。
2.通過public ComponentName startService(Intent service)方法去啟動一個Service,此時Service的生命周期與啟動它的Context無關。

View和SurfaceView的區別?

答:SurfaceView中采用了雙緩存技術,在單獨的線程中更新界面
View在UI線程中更新界面
當程序需要更新View上的圖像時,程序必須重繪View上顯示的整張圖片
新線程無法直接更新View組件

Android的進程優先級

答:android的系統進程分為五個等級, Foreground Process(前臺進程), Visible Process(可見進程), Service Process(服務進程), Background Process(后臺進程), Empty Process(空進程)

自定義View相關知識,下拉刷新的實現原理?

答:【1】Header 通常有下拉箭頭,文字,進度條等元素,根據下拉的距離來改變它的狀態,從而顯示不同的樣式
【2】Content 這部分是內容區域,網上有很多例子都是直接在ListView里面添加Header,但這就有局限性,因為好多情況下并不一定是用ListView來顯示數據。把要顯示內容的View放置在一個容器中,如果想實現一個用ListView顯示數據的下拉刷新,需要創建一個ListView旋轉到容器中。處理這個容器的事件(down,move,up),如果向下拉,則把整個布局向下滑動,從而把header顯示出來。
【3】Footer可以用來顯示向上拉的箭頭,自動加載更多的進度條等。
亦可以使用開源PullToRefreshView

在你項目中所用到的第三方?

Volley xUtils okHttp(支持圖片上傳) ImageLoader RxJava Retrofix dataBing
Google推薦的圖片加載庫Glide介紹
目前Android在使用的Json解析框架主要有Jackson、Gson、FastJson、org.json;
源碼解析
使用 picasso 加載圖片;使用 EventBus 同步不同頁面間對象狀態
UI框架優化,增加RefreshFragment基類抽取
通過LeakCanary、TraceView等工具進行內存檢測,優化內存的使用,構建一套服務業務需求的線程池
熟練掌握okhttp,glide,greenDao等主流框架;

Android中原生HttpClient和HttpUrlConnection來處理網絡操作比較復雜,需要我們處理很多操作:如果圖片的緩存和請求的調度。

簡單的說下Retrofit的使用流程?

Retrofit2在項目中的完整使用流程:創建Bean類 --> 創建接口形式的http請求方法 --> 通過Retrofit.builder()創建接口對象并調用http方法請求網絡數據 --> 在RxJava的Observable(被觀察者)中異步處理請求結果!

Volley到底有哪些特點呢?

內部封裝了異步線程,可直接在主線程中調用服務器端并處理返回結果,可以取消請求容易擴展
缺點:大文件下載表現不好,只支持Http。

項目中有沒有見過內存泄漏以及OOM?為什么會產生?怎么解決的?

內存泄漏它是造成應用程序OOM的主要原因之一
在android應用開發中,當一個對象已經不需要再使用了,本該被回收時,而另外一個正在使用的對象持有它的引用從而導致它不能被回收,這就導致本該被回收的對象不能被回收而停留在堆內存中,內存泄漏就產生了。
全局變量的濫使用,加載對象過大,相應資源過多,來不及釋放,資源未關閉造成的內存泄漏。
在內存引用上做些處理,常用的有軟引用、強化引用、弱引用
在內存中加載圖片時直接在內存中作處理,如邊界壓縮
及時回收不用的對象如Bitmap,IO流。

Android系統的有哪些安全機制?

應用程序簽名機制,權限申明機制,訪問控制機制,進程通訊機制,內存管理機制。

Android-Service和Thread的區別?

service是android四大組件之一,沒有任何界面,它不是一個線程,一般在后臺默默運行。有自己的生命周期。有本地service和遠程service,本地service一般有2中啟動方式,startService和bindservice. 遠程service就是所謂的AIDL,實現跨進程調用.
thread是java里的一個線程概念,跟service是完全不同的。1中說的service特點,thread在android中大多沒有。尤其是生命周期和跨進程調用,thread是沒有的。

Android圖片緩存之初識Glide

MarsDaemon實現安卓APP進程常駐筆記

Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android開源組件加載網絡圖片的優缺點比較

Asset目錄與res目錄的區別
ANR問題,force close問題,activity,service,broadcast各自超過多少秒報ANR
Activity啟動模式,intent匹配規則
Android反編譯
JNI和native方法
Android系統的有哪些安全機制
Android新特性有哪些(5.0 6.0 7.0)
Dalvik和ART區別
Android屏幕適配有哪些方法
View事件體系,滑動沖突
View繪制原理,性能問題(view繪制間隔16ms,60fps),measure,layout,draw三大過程
如何避免overdraw

Android動畫分類和各自特點
View和SurfaceView的區別
APK瘦身的辦法

Android如何獲取Crash信息
ANR日志分析
Android動態加載,如何解決方法數越界
Android怎么加速啟動Activity
Android內存泄漏問題,內存泄漏分析工具
Android內存溢出問題,圖片的三級緩存
Android系統開機過程
Zygote和System進程的啟動過程
Activity的啟動過程
Android的消息機制,Handler原理
AsyncTask源碼,優缺點
HandlerThread和IntentService的原理和特點

AIDL原理
Binder機制原理
ActivityManagerService

一個如何維持一個長連接

如何實現進程保活

Binder里面引用計數的原理

Binder底層為什么用紅黑樹,紅黑樹的原理知道嗎

Retrofit的原理,為什么不用volley

為什么選用Glide,原理?

LruCache的原理

Android系統框架

handler和asyncTast的區別,然后讓我自己設計線程池怎么做

Fragment好處,碰到過什么bug,怎么解決的

為什么選用Realm,原理是什么

如何設計一個網絡加載框架

Android四大組件的理解(這個扯了十多分鐘)

ContentProvider的啟動過程

Activity的四種啟動模式,用過哪一種,為什么要用

Service和InentService的區別

View的事件分發和繪制原理

如何解決滑動沖突

.接著問了是否用過 volley,果斷沒有,說用過Retrofit,畢竟現在都是MVP+Retrofit+RXJava,然后就讓講下MVP

多進程通信的方式(這個就比較模式化了,面試官也知道基本用不上)

廣播的使用

Handler機制,以及具體的使用情況

討論了一下各個框架的使用

AIDL,廣播的種類

.如何解決app卡頓的問題,用到哪些工具

view的繪制流程

多線程和handler結合使用要注意什么 (我沒get到他的點,他想要的答案是當activity隱藏或者銷毀的時候要注意handler的任務取消之類的)

四大組件是在主線程運行的嗎

sqlite的相關的

下載大文件要注意的事情(防止OOM)

Android的啟動流程、四大組件、listview的運用于優化、MVP、兩個activity怎么傳輸數據,intent是怎么實現傳輸數據的,鬧鐘怎么實現

fragment,該怎么用,比如實現類似微信的那種滑動,講了一下fragment的滑動以及底部狀態的切換。之后又問了怎么保存view的數據,當時以為就是回調生命周期的方法時保存數據,面試官就給我講了一下現在常用了的將頂層的view作為變量然后傳遞引用,之后切換回來的時候直接在oncreateview里面進行判斷即可。

Activity與Fragment的生命周期。

Acitivty的四中啟動模式與特點。

Activity緩存方法。

Service的生命周期,兩種啟動方法,有什么區別。

怎么保證service不被殺死。

廣播的兩種注冊方法,有什么區別。

Intent的使用方法,可以傳遞哪些數據類型。

ContentProvider使用方法。

Thread、AsycTask、IntentService的使用場景與特點。

五種布局:FrameLayout、LinearLayout、AbsoluteLayout、RelativeLayout、TableLayout各自特點及繪制效率對比。

Android的數據存儲形式。

Sqlite的基本操作。

Android中的MVC模式。

Merge、ViewStub的作用。

Json有什么優劣勢。

動畫有哪兩類,各有什么特點?

Handler、Loop消息隊列模型,各部分的作用。

怎樣退出終止App。

Asset目錄與res目錄的區別。

Android怎么加速啟動Activity。

Android內存優化方法:ListView優化,及時關閉資源,圖片緩存等等。

Android中弱引用與軟引用的應用場景。

Bitmap的四中屬性,與每種屬性隊形的大小。

View與View Group分類。自定義View過程:onMeasure()、onLayout()、onDraw()。

Touch事件分發機制。

Android長連接,怎么處理心跳機制。

Zygote的啟動過程。

Android IPC:Binder原理。

你用過什么框架,是否看過源碼,是否知道底層原理。

進程有哪些通信方式

ListView優化方案

service和線程的關系

.looper是線程級別還是進程級別

activity1啟動activity2的過程,是否可以在新的進程里面,如果在新的進程里面流程有什么不同。啟動按返回系統的調度。

廣播的注冊方式,信息是保存在哪里,發送廣播是如何回調廣播接收者。

app安裝過程,每次開機是否會重新安裝所有的app

Android系統為系統安全性做什么事情

zygote和systemservice的關系

為什么zygote死掉后會重新啟動

界面的繪制過程

開機畫面有幾個,分別是什么時候顯示和暫停

activity四種啟動模式

有沒有使用過Android的開源庫,或者開源控件

啟動一個應用的流程

打開一個activity的過程

設計一個Android的下載模塊

項目點為什么要用view不用fragment?同樣fragment可以解決緩存(用了view,并且設了map作為緩存,為了模擬activity棧重制了新的棧來實現相同的回退功能,需要處理連續點擊和多次點擊的問題,還需要解決連續點view,緩存增大而oom)

用了什么設計模式?為什么要這么用?(舉例了觀察者+工廠)

談一下Collection包:hashmap底層實現,用了什么方法解決hash沖突(基于jdk版本),具體是如何實現(jdk1.5鏈表頭插還是尾插),為什么不安全?如何變得安全(concurrent包下集合類),concurrentHashmap實現原理是?

Executor框架說說你的理解?

結束一條Thread有什么方法?interrupt底層實現有看過嗎?線程的狀態是怎么樣的?如果給你實現會怎么樣做?

Io和nio有沒有了解?

現在需要在四大組件中傳數據?如何傳,方法有哪些(需要自己再具體說什么情況)?

緩存算法除了lru還認識哪種?

Java中有內存泄露嗎?是怎么樣的情景?為什么不用循環計數?

ANR產生原因?怎么定位?

ContextImpl的源碼使用的設計模式?為什么你認為其中有外觀?

在一個app中,只有在一張activity,所有功能業務邏輯在里面實現,現在報ANR,你會怎么做?(代碼層面:耗時操作(UI、網絡、數據庫),工具層面:trace和crashHandle)

Android中ClassLoader和java中有什么關系和區別

用過什么開源,舉一個例子?(volley)

Activity生命周期?情景:現在在一張act1點了新的act2,周期如何?

Act的launchMode,有沒有結合項目用過(自己的程序鎖和微信的PC端登陸對比,不過我現在又發現,應該大約估計可能是動態加載的一個缺陷,如果有找到相關信息,請務必跟我說。具體問題就是,當在PC端登錄時,Android終端的微信會跳出,即使wechat的task不是在fore,當按下確認,返回的是wechat,而不是自己先前的app)

View的繪制原理,有沒有用canvas自己畫過ui?

動態加載主要問題

插件化

Assetmanager獲取資源原理和資源獲取原理

項目Oom異常解決方案+用戶體驗優化方案

Touch傳遞機制+listview滑動沖突

Volley底層實現

為什么不能用volley請求大數據

Volley底層實現+設計模式理解

Imageloader緩存策略

項目如何解決oom?響應速度是怎么優化?電量消耗如何優化?

描述一下Aidl和android ipc?(binder機制沒跟他講得很深)

屏幕適配使用的方案?有沒有輔助的工具幫助?(hyviewer)

如何分析內存泄露?(代碼+工具traceview+mat)

那ANR呢?(我忘記了trace)

View樹繪制?如何優化布局?

事件傳遞原理?

uil的框架如何設計?有沒有用過glide?(結合了fresco的分析)

Volley和okhttp底層實現(也講了okio),為什么說okhttp高效?

Listview的優化(同一布局,左為bm,右為text)?

Apk瘦身可以關注什么點?(這里忘記了說so庫,然而他也不會)

講一下動態加載技術點?

適配優化屏幕適配接觸到什么方法?

Binder機制(只深入到framework)

View樹繪制+事件分發

Contextimpl源碼,幾種context的區別

如何實現通訊?Binder機制

屏幕適配接觸到什么方法?

java內存泄露是怎么樣的?(本質+handler例子)

Handler機制?

情景題,把handler設static,里面需要對一個view更新,會不會內存泄露?(可達性分析)

UI接觸得多嗎?有沒有用過canvas畫過圖?

在項目中為什么要用動態加載?最大的問題是什么?怎么解決資源管理問題

Volley底層實現?(okhttp沒問)

自己寫的圖片加載工具類談一下?(結合uil談了一下)

描述下Aidl?覺得aidl有什么缺陷

JNI的使用。

Activity啟動模式

兩個應用能使用同一個任務棧么?

Binder機制

Volley源碼的實現

大圖加載

Http && Https

常用的加密算法,對稱加密和非對稱加密

Android里的序列化

Android里的內存泄漏

Android里的設計模式

兩個應用間Binder通信的原理

OkHttp如何對鏈接進行復用

如何設計鎖

內存泄漏如何發現(用什么工具)

Handler+Thread機制、

View繪制過程、

Activity的啟動過程

什么時候會發生SOF問題

有用過什么框架,看過他們的源碼沒?

平時有用過什么開源項目?

AnsycTask的原理?(我的簡歷里提到過AnsycTask)

在紙上寫了個Activity,然后在類里面定義了一個Handler,問我這個會有警告,怎么解決?--static、軟引用

Service的保活

Handler機制,Handler除了線程通信還有什么作用,這個我說通知吧,因為Android是消息驅動的,不是特別明白面試官要問哪點,難道是延時?

Activity的啟動模式,每種啟動模式的使用場景,singletop中回調onNewIntent和finish掉之后onCreate()有什么不同?,這個4種的使用場景中,我singletop回答不是特別好,應該是那種頻繁接受消息的activity需要使用

Fragment的生命周期,棧管理,和commit()類似的方法還有哪個,commit類似的那個之前真沒注意,應該是commitAllowingStateLoss(),區別是是否能在activity保存之后調用

實現一個文件夾列表,面試官要求5000個文件的時候才從ViewGroup轉到ListView

ART和Dalvik的區別

批量插入50條聯系人,比較高效的方法,ContentProvider是否了解原理

啟動一個APP的流程

android學了多久?廣播分為幾種?實現原理,工作原理,廣播接收器有幾種?

ipc的方式

AIDL怎么用?

android四大組件

broadcast機制

thread.wait()與thread.sleep()區別

okhttp原理

線程池機制

androird進程間通信方式

事件分發機制

view的繪制流程

MVP的介紹

說了下Android事件的分發機制

onSaveInstanceState和onRestoreInstanceState調用的過程和時機,onNewIntent方法

fragment的生命周期,和Activity如何進行通信

Android的事件分發機制,ACTION_DOWN和后續事件如何消耗

Activity的啟動方式

View的繪制流程,MeasureSpec如何工作,父的MeasureSpec和自己的LayoutParams

廣播的兩種注冊方式

數據庫如何升級(懵逼)

Handler Looper的使用方式,實現機制,設計的原因

HandlerThread有沒有了解(很神奇的我完全忘了當時是怎么答的了)

ThreadLocal是干嘛的,使用的地方

Sqlite的一些問題

Activity A調用Activity B時,A調用什么函數(onPause)

onSaveInstanceState和onRestoreInstanceState又問了一次

JNI的參數ENV參數。。。

JNI工作時,java 層的類如何找到C/C++層的類(懵)

AIDL的工作流程

Service與Thread區別,這個問題應該是必問的了,一定要知道清楚。

SQLite能否并發讀取或者寫入,自己只記得不能并發寫,可以并發讀,但是原因不清楚。

Activity與Service的通信問題,這里要對Binder機制和AIDL比較了解,因為自己沒在項目中用過,所以回答的不是很好。這個還可以通Broadcast進行通信。

畫出Activity與Fragment生命周期

activity生命周期,啟動模式,service在哪個線程,service防殺死

ViewPager如何判斷左滑右滑

activity的啟動模式及在你項目里的應用

View事件分發機制

view事件沖突的處理

android7.0的虛擬機的優化(什么即時編譯)

啟動一個應用的流程(從點擊桌面的icon開始)

sqlite如何批量插入大量數據,如何提高效率(放到一個事務里)

fragment 和activity之間如何選擇(說出自己的理解)

android6.0 的動態權限(聊項目時扯上去的)

View的繪制過程

當時談到使用到了開源框架xtuil中的dbxutil和httptuil,然后讓分析這倆個模塊源碼;其中詳細問了httputil實現原理(主要是線程池,封裝的是httpclient) 使用到了slidingmenu_library開源控件,讓分析這個開源框架的源碼;

說說你做過最復雜的控件

animation 和animator的區別

說說推送 ,扯到長連接,心跳包,直接被面試官打斷,這個我們都知道,說說保持一個長連接很簡單,為什么長連接會帶來很多麻煩,還提示從耗電量,微信分析

項目使用開源框架的源碼分析討論 ,主要還是集中在httputil源碼實現、討論了線程池設計,阻塞隊列; 由于httputil封裝了httpclient,然后讓比較 httpclient和httpurlclient區別; 扯到了http協議,問了http與https區別,(當時我在分析直接被打斷,“這個我們都知道,簡介概括”,然后我我直接說https=http+ssl+加密算法); 加密算法是對稱還是非對稱的,,商量秘鑰的過程是對稱還是非對稱

android消息處理機制 ,handler+loop分析; loop線程與普通線程區別; asynctask源碼分析(這里有個線程池幾個關鍵參數5,128,使用的阻塞隊列,補充講了asynctask缺陷) ;如何改進asynctask造成的內存泄露的問題,從而延伸到 jvm虛擬機四種引用

說說androi 使用卡頓是什么造成的,給出優化 ,主要回答了ui overdraw避免,<include>標簽,<viewstub>標簽,<merge>標簽使用,hierarchy viewer工具的使用; 面試官追問:再從底層分析;(其實就是 16ms和60fps的追求了) ;再結合GPU操作分析一下UI過程; 然后說到了大圖加載問題,提到UIL框架,讓分析內部源碼(我主要從uil的緩存策略和線程池機制分析)

忽然扯到并發,讓分析concurrenthashmap,答了分段鎖仍不滿意,要求再分析一下size操作是如何做的

從listview優化談到recyclerview,深入分析一下recyclerview特點 ,然后引申到瀑布流如何實現,不使用recyclerview如何實現瀑布流。

屬性動畫

touch事件分發機制

android開機過程(主要討論了zygote)

讓你設計一個游戲人物,如何設計 ,主要講了抽象類+接口+mvc和mvp模式

Android中的幾種Context什么區別?這個問題我回答的不好,簡單說了一下生命周期和Context的繼承關系,以及注意事項彈對話框不能使用applicatuion的上下文

Android中的內存泄露遇到過沒?我講了Handler持有Activity泄露以及google建議的嵌套類、弱引用的解決方案、Drawable的setCallback,耗時的線程可能會持有Activity,Bitmap調用recycle,因為以前bitmap在native分配,所以要調用recycle釋放,現在不用了因為在堆分配,由GC回收,他問我是幾點幾版本開始的,我說是3.0版本。

接著問我bitmap能否復用?這個我沒弄懂意思,就回答不知道,最后查了一下,也是3.0以后的有個Option的inbitmap字段可以復用

平時遇到過OOM沒?遇到過,主要是圖片加載很常見,我講了BitmapFactory的解析Options的in...bound參數先讀取圖片信息進行必要的縮放,還有緩存,講了DiskLruCache、LruCache緩存策略,以及可以加入軟引用,講了底層的LinkedHashMap實現。

用過外觀模式?(表示沒聽過)這是Android中的知識嗎?面試官告訴我,是一種設計模式,我說,哦,沒有,我知道的有單例模式、工廠模式、代理模式、觀察者模式、裝飾者模式、迭代器模式。然后讓我講一下代理模式,我就大概說了一下,然后說在Android中使用AIDL產生的的代碼中當查不到本地的Binder時asInterface返回的就是一個代理對象,然后面試官說,那就是你使用過bindService調用過Service了?恩。

FrameWork層看過那些源碼?Java源碼呢?講了一下看過的框架層源碼和java集合,沒有具體講。

自定義控件做過哪些,需要注意什么?處理wrap_content的情況,ondraw不能耗時,刷新率16ms等,然后讓我講了一下圓角矩形的圖片控件怎么做,降到了畫筆的xferm...方法進行圖面交疊。

還問到我Android動態加載了解不?我沒用過,但之前看到過通過DexClassLoader使用接口實現的一種插件形式

draw和onDraw方法區別。

view和viewGroup區別。

內存溢出處理。

Activity能運行在別的進程中嗎?

內存泄漏。

Bitmap的recycle方法執行后會立即回收內存嗎?

進程間通信的方法。

Activity中如何調用另一個進程Service里的方法?

AIDL的方式能訪問另一個進程Service里靜態變量嗎?

Activity的四種啟動模式。

有用過什么框架?

知道Picasso的緩存機制嗎?

ListView的優化。

有木有在項目中用到什么設計模式?

更新UI用的什么機制?(最后一個問題沒聽懂問的是什么,追問了面試官,面試官說了什么上層調用底層,底層再調用上層......還是沒聽懂,就說網絡請求用的框架,在回調接口中更新UI)

在項目中有沒有用到圖片加載庫?網絡加載庫?

問我JAVA哪些先進的東西給你在Android開發帶來方便?我說JSON庫。知道幾種JSON庫,有什么區別?

跨線程通信 主要涉及LooperMessageHandler以及MessageQueue

說一下自定義View需要注意哪些細節 主要說了一下View繪制的三大過程onDraw()不要做耗時操作 不要創建新對象 以及 怎么處理View的觸摸事件

View的事件沖突的解決辦法 ps:重寫dispatchEvent()或者touch()方法

講一下listView的優化方法

講一下RecycleView與listview的區別

view的繪制過程

Activity的啟動模式

跨線程通信

夸進程通信 主要是Android的AIDL

如何解析json數據和xml

自定義view的幾個步驟 怎么刷新view ps:onLayout(); onMeasrue();onDraw();

RecycleView的優化

幾種context的區別

看過什么源碼沒有

講一下binder類

Runnable運行在哪個線程里面 ps:開啟一個子線程的唯一方法就是new Thread().start();

HashMap和HashTable的區別

raw和assets文件夾的區別

activity關閉后尚未運行完畢的thread會怎么樣 ps:會變成空進程線程,優先級最低 很容易被終止回收

mainfest文件的合并規則

跨線程通信

講了其中一個項目是怎么實現的 問jsoup怎么拼 = =

用過哪些開源庫 講一下他的架構是怎樣的

圖片三級緩存 內存緩存滿了怎么辦 ps:優先級隊列 滿了后根據優先級主動刪除一部分圖片 根據LRU算法確定優先級

講一下JNI開發的過程 java怎么找到c函數 ps:JNINativeMethod保存函數對應關系

activity的四中啟動模式

service的生命周期

項目中用JNI做什么 為什么要用他呢

什么是OAuth協議 做什么的

四大組件,詳細說

handler機制(深入源碼)

CotentProvider的權限問題,就是怎么樣使得數據對外有選擇性的提供和使用

Android的存儲方式

Handler、Looper、MessageQueue

AsyncTask 為什么java已經有線程池的實現了,還要繼續使用AsyncTask,AsyncTask相對于java自帶的線程池的好處

onTouch事件的處理機制

說一下MVC以及其在Android中的應用

說一下OOM以及你怎么解決的

了解Android的Framework么

說一下一個Android APP從點擊打開開始,是怎樣展示在用戶面前的(Zygote、Ams、Wms等)

viewpager里面只能嵌套view嗎 可不可以嵌套Activity

假如viewpager里面的每一頁都有有很大數據量的內容,那么在快速的左右滑動時,如果出現了內存被回收的情況,如何處理 假如出現了OOM,怎么處理

同上情況,使用Fragment,又當如何?與viewpager有什么區別

ExpandableListView的Adapter怎么寫

在ListView的每個item中如果可能出現的view都不一樣,如何處理?動態獲取view種類數量的話是不是就不能使用viewHolder進行優化?固定顯示view如果不存在該種view就不顯示的方法是否太耗內存

ListView的Adapter的getView具體是什么機制?

Activity之間傳遞大量的數據用什么方法 Binder Bundle不夠大 Socket 在同一應用中沒必要使用 共享內存 static變量——同一應用中static變量如何控制,會不會并發出問題,如果Activity由于內存不足被kill掉,再重啟的時候static變量的值還可靠嗎:設置專門的訪問類,進行讀寫控制,以及Activity重啟后的初始化工作。

SQLite在使用時 假如ActivityA是用于修改SQLite,ActivityBCDEF。。。是用來展示SQLite的內容,如何在修改SQLite的同時使得BCDEF...都立刻獲得最新的數據?SQLite有沒有類似于ContentObserver的這么一種監視類可以監聽到SQLite內容的改變?如果廣播通知所有類,那么廣播可以攜帶多大的數據?

假設把一個ActivityB向右滑動可以回到上一個ActivityA,B漸漸透明,A漸漸清晰,要怎么編寫頁面?說說你對android:theme的理解,說說你對alpha值的理解

ListView在數據量很大圖片很多的情況下怎么優化?假如一個圖片,輕輕的向上滑動一丟丟,那么需要重繪嗎?(什么鬼。。。)

詳細展開說一下所有LaunchMode的應用場景

假如A-》B-》C,想讓C后退直接到A,使用什么樣的intentflag?

假如A-》B-》C,C使用singleTask,C后退,后退到什么地方呢?

在全屏顯示高清大圖的時候,網速慢的情況下如何顯示?漸進式顯示是怎么做到的?如果想顯示下載進度圈圈,該如何實現?

AsyncTask在4.x以后有什么改變?怎樣改回并發執行好多個?如果一個AsyncTask結束取得結果之前Activity就因為內存原因被Destroy掉了,那會有什么情況發生?會內存泄露嗎?會空指針嗎?需要在Activity徹底死掉之前把AsyncTaskcancel掉嗎?如果沒有cancel掉,然后Activity重啟了,那這個Asynctask又當如何呢?

AsyncTask內部實現機理 與Thread+Handler有什么不同

說一下HandlerThread

你的APP里,是每個Activity都有一個Handler呢還是所有Activity共享一個Handler

基于事件監聽、基于事件回調 假如一個touch事件發生,那是監聽器先收到還是onTouch函數先收到

假如你要記錄ListView滾動到的位置,要記錄什么信息,view怎樣獲得坐標信息

說一下canvas

dialog和popupwindow的應用場景 如果popupwindow在沒有dismiss的時候Activity finish了,會出現什么情況?

了解過什么三方庫?為什么不用三方庫?

Service和推送通知,通知有沒有可能出現有推送但是通知欄收不到通知?service被kill掉會如何?如何保證service不被kill掉

了不了解Scrollview scrollview和ListView有什么相似點 有什么不同 那如果這兩個是繼承關系 那應該是誰繼承誰?

dp sp px各自的應用場景是什么 換算關系是什么 使用sp的時候如果調整系統字體,顯示字體會跟著調整嗎?

gallery為什么被廢棄?為什么Google推薦使用viewpager代替gallery呢?有什么改進?

handler.postAtTime不是延時post么 那handler怎么延時處理Message

ListView的優化 ;Lru如何實現的 ;OOM的處理 ;GC原理 ;循環引用的問題 引用計數與可達性算法 ;LaunchMode

網絡框架實現,volley原理

線程池原理,java提供了哪些線程池

一個activity只能有一個進程么【對進程的理解】

activity任務棧,啟動模式相關,四種啟動模式

夜間主題的實現方式

動態加載原理,classloader理解

listview實現item左滑需要考慮的問題

view的事件分發與渲染流程

LruCache的理解,原理,以及還有哪些方式實現緩存調度

GC原理,實現方式,能否手動去控制GC回收

OOM,內存泄漏的問題有沒有遇到過,如何處理

mvp與mvc的區別,實現,原理

volley原理,發送五個請求(相同以及不同)時,內部所做處理?如何根據發送請求結束后,剔除相同的等待請求?

圖片緩存技術的實現,如何結合volley實現,volley自帶緩存管理還是需要自己去實現,緩存的底層實現

listview原理,adapter與view是如何綁定的,如何自己設計一個類似listview的自定義view,子item復用,管理以及getView的實現

android線程模型,looper,messageQueue一套機制

線程實現方式,thread+asynctask+handlerThread+intentService,彼此的應用場景以及原理

asynctask底層實現原理,為何不能在非主線程中實例化,其實還是跟onPre and onPost在當前線程實現有關

手機唯一標識方式

手機app耗電量跟什么有關,耗電優化

推送服務原理,心跳機制

service使用注意事項以及原理

服務應用喚醒實現,aidl 的service更新后如何讓舊的客戶端兼容

多線程實現,通信原理

進程通信原理,使用訂閱者模式時,服務端拿到的binder對象為何是新的實例,如何獲取到真正客戶端實例(RemoteCallbackList)

ssl協議,握手交換密鑰過程,加密算法,對稱非對稱加密原理

lrucache原理實現,linkedhashmap底層,手寫代碼實現lrucache,對相關的bitmap進行管理

線程池構造函數傳參意義,手寫代碼實現線程池,繼承方式,不能用現成的

異步接口實現,實現跨線程通信,不能用handler,looper那一套機制

socket編程實現http請求,手寫代碼實現

volley原理實現

Android事件分發

scrollview特點

處理listview圖片錯位方式

Mvp與mvc區別,實現,架構表示

android緩存實現

Java線程 run與start區別,原理實現

打包混淆原理

volley原理,實現

jar封裝的private方法能否在外部調用

反編譯方式工具及其原理

網絡請求方面如何處理

jni使用及其原理

對稱加密與非對稱加密

使用圖片緩存但是服務器改了實際的圖片,但url一樣,如何在客戶端區別

線程間通信,進程間通信,binder原理

sharepreference原理

事件分發原理

設計模式,延遲加載實現單例模式,內部類來解決,加鎖也不穩

mvp與mvc

線程池調度實現,不能用executor(當時居然以為blockingqueue存線程呢=_=)

動態加載,dex分包,熱修復

緩存原理實現,內存如何分配

如何減小apk體積

性能優化從哪幾方面考慮(內存,cpu,fps,ddms靈活dump)

looper,handler等原理

activity的啟動模式

listview與recycleView的區別與優缺點

A向B發送消息,A能實時看到B的閱讀時間,問A實現方式

volley層次結構,原理,為什么選用volley,不用其他開源框架,對開源框架的看法

MVC與MVP的區別,activity,fragment扮演的角色,presentor之間的通信問題。

進程間的通信,binder的原理,intent與aidl的應用場景及相關比較

圖片如何緩存處理,如何處理oom

自定義view實現,注意事項

加載圖片請求的超時時間設置,多少秒合適,原因,大圖如何加載。

線程間的通信,并發問題解決方案。

快速排序為什么叫做快排,其算法復雜度,及其實現原理

應用簽名是為了什么,簽名原理是什么

root之后有什么重大的變化,開發者可以操作什么

給出九游android客戶端程序,解釋下相應的布局,listView做大面積的嵌套,下拉刷新的實現

渠道提示不合法的問題,為何系統能識別渠道非法

說一下Binder機制的底層實現。

Android中進程之間通信,除了Binder還有什么?說一下底層實現原理

說一下Android中的事件處理流程,結合源碼解釋,不要直接說規律結論。

系統調用的方式?系統調用發生的場景?系統調用常用函數?系統調用的具體過程?

Binder的一次拷貝發生在哪里。

AMS的作用?

一個Activity啟動另一個Activity時函數調用流程。

Android中Handler機制?

什么是ThreadLocal,一個線程可以獲取到另一個線程的Looper嗎?怎么獲得?

序列化怎么實現?答安卓端有Serializable和Parcelable。然后問這兩個有什么區別,分別怎么實現。

問fragmentPagerAdapter和fragmentStateAdapter的區別。

fragment和fragment怎么通信?

listview怎么優化?

網絡通信怎么做的?volley的實現?

http和https的區別?

有看過開源第三方庫嗎?

登陸注冊這塊的邏輯一般怎么做?

canvas畫了個線,怎么撤銷?

性能優化怎么做?

寫了多少代碼?有開源項目嗎?有參與開源項目嗎?

bitmap的本質?答到了cpp層。

activity的異常退出和啟動調用的方法

activity和service的區別

service啟動方式以及區別,以及service的作用

activity的launchmode

過濾規則在manifest和代碼中注冊有啥區別

布局中優化常用方法,以及分析工具,我答的時候基本圍繞層級優化答得,考官建議我從過度繪制等加強學習

屏幕適配問題,老生常談啦

bitmap加載一個100張圖片的優化處理

lrucache和disklrucache,其中還問到軟引用和弱引用的使用

listview的優化

自己用過什么開源框架,還有看過源碼嗎

React-native的通信機制

react-native和phonegap的區別

自己在項目中開發遇到的坑關于react-native

有沒有看過react-native的源碼,能否講講最熟悉的源碼

線程和進程的區別,線程自己有沒有自己的內存

多線程帶來的影響

binder的機制

android為什么使用binder進行跨進程通信

Andorid四大組件

anroid生命周期,opause,onStop區別

Fragment,是否看過源碼,如何啟動

Service有哪幾種

隱式啟動和顯示啟動

Service兩種啟動方式

啟動線程方式有哪幾種

handle消息隊列相關

幾種常用布局,布局到group樹過程。。。。

weight屬性

布局優化相關

Arraylist LinkList

線程進程區別

一個app能否是多進程?(大概)

converview一些知識點

oom如何發現

handler出現oom如何解決

如何開啟多個網絡異步請求

線程池內線程的數量如何確定

說說OKHTTP的實現

UIM的實現

講一下mvp,mvp和mvc區別,講一下用過的開源項目,說一下如何實現

asynctask實現

線程池如何使用

如何實現多進程,進程間如何通信,具體講一下socket

surfaceView

如何進行界面優化

如何實現緩存

IOC的思想?

AOP的思想?

為什么android要推出handler啊?handlder能不能用在線程中創建啊?

AysnTask的源碼分析,能不能在其他線程中創建的?

一個關于android進程的問題,哪些android進程不能被殺死的?

斷點續傳的基本原理(問的很細很細)

圖片壓縮方式

數據結構對一個基本有序的數組應該采用什么方式進行排序,對一個亂序的數組應該采用什么方式排序能快速找到前n個數?為什么?

Java和JavaScript的區別

介紹一下restful框架

多線程安全實現方式,synchronized和lock,信號量的區別

http的理解,http中無狀態的含義是

cookie和session的區別

虛擬機相關知識

四大組件生命周期

對我項目中用到一個開源框架中算法了解嗎?(IK Analyzer)

數據緩存處理

斷點續傳原理

Hashmap和hashtable之間的區別

四大組件相關知識

lrucache的基本原理

三級緩存的理解

Volley的原理及使用

對Restful了解

事件分發機制(問的很細很細)

自定義view的繪制方式

Listview的優化(問的很細很細)

Xml解析方式,原理優缺點

自定義控件如何繪制,然后現場畫出了一個控件,問我具體應該怎么繪制(如何計算子view的寬高度等等)問的超級細

算法題題目忘了,只記得寫的時候時間復雜度過高。

Activity的生命周期及其他相關知識

安卓動畫相關知識

service中啟動方式有哪些區別是?

線程安全實現方式,線程池具體原理

Linux和安卓中跨進程間通信間的區別,以及安卓中binder基本原理

四大組件的相關知識

java內存模型

GC算法具體內容

接口和抽象類的區別

四大組件的生命周期

Hsahmap的底層原理

斷點續傳的原理

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,608評論 25 708
  • Android Studio JNI流程首先在java代碼聲明本地方法 用到native關鍵字 本地方法不用去實現...
    MigrationUK閱讀 11,914評論 7 123
  • 時間 Monster. 凌晨的白晝, 清晨的朝霞, 午時的烈日, 傍晚的余暉, 夜晚的星空。 落地時哇哇的哭聲, ...
    PImonsterNK閱讀 200評論 0 1
  • 煙花一如既往的絢爛整個遲來的夜空,那一刻,就連暗色的云都如此驚艷。 冷風稀釋了都市三月夜雨,在莫斯科郊外的燈紅酒綠...
    醉花令閱讀 304評論 0 0
  • 裝潢什么的……真是個大工程…… 光是簡單的明確一下大體方向就感覺相當傷神了…… 回頭還有各種材料的選定……種種種種...
    沃雷塔爾閱讀 184評論 0 0