乾貨 乾貨 2019Android面試題
前言
找工作還是需要大家不要緊張,有我們幹這一行的接觸人本來就不多 難免看到面試官會緊張,主要是因為怕面試官問的問題到不上來,那時候不要著急 ,答不上了的千萬不然胡扯一些,直接就給面試官說這塊我還沒接觸到,以後如果工作當中遇到的話我可以很快的吧這個問題給解決了,但是我們有了這篇文章,就不一樣了,基本上問的問題都有適當的看一下,到時候很快就可以拿到offer 我在這裡祝大家工作順利,天天開心 ,好了下面就是正題,
-
Tcp和http 的區別
Tcp是在網路層,http是在服務層.Http藉助Httpclient和urlconnenticon是短連線 ,請求一次後就斷開了需要 重新請求才能連線
Tcp藉助是socket,長連線需要三次握手,第四次握手才能取消連線
2 .儲存資料有哪些方式
檔案儲存,
sharedpreference儲存,
sqllite儲存 ,
contentprivider儲存 ,
網路儲存
-
如何將一個Activity設定成視窗的樣式。
可以自定義一個activity的樣式,詳細見手機衛士的程式詳細資訊
android:theme="@android:style/Theme.Dialog"
4.如何退出Activity?如何安全退出已呼叫多個Activity的Application?
每開啟一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
在application 全集的環境裡面
List<Activity> lists = new ArrayList<Activity>();
每一個activity在執行oncreate()方法的時候 lists.add(this);
Ondestory()中執行 lists.remove(this);
退出的時候得到在application的lists執行,執行下面方法
for(Activity activity: lists)
{
activity.finish();
}
-
兩個Activity之間怎麼傳遞資料?
基本資料型別可以通過.Intent 傳遞資料
Bundle bundle = new Bundle();
bundle.putShort(key, value);
intent.putExtras(bundle);
獲取到啟用他的 getIntent();
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
Bundle 類似map的集合
intent.getStringExtra("key","value");
-
Activity怎麼和service繫結,怎麼在activity中啟動自己對應的service?
startService() 方法啟用服務,呼叫者與服務之間沒有關連,即使呼叫者退出了,服務仍然執行。 stopService停止
bindService () 把service 與呼叫者繫結 ,如果呼叫者被銷燬, service會銷燬 //unbindService(conn);//解除繫結
onCreate, onStart, onDestroy,
7 . 什麼時候使用service
1.Service的特點可以讓他在後臺一直執行,可以在service裡面建立執行緒去完成耗時的操作. 後臺播放音樂,
錄音通話記錄
2.Broadcast receiver捕獲到一個事件之後,可以起一個service來完成一個耗時的操作.
-
Intent傳遞資料時,可以傳遞哪些型別資料?
1.一般的基本資料型別 Intent .putextra() intent.getStringextra();
2. 資料的uri, intent.setData() intent.getData();
9.請描述一下Broadcast Receiver。
有很多廣播接收者 ,系統已經實現了,監聽一些事件:如接收到簡訊 ,打出去電話
廣播分兩種
有序廣播 可被攔截,可終止,可以修改資料
無序廣播 是不可以被攔截掉的
-
請介紹下ContentProvider是如何實現資料共享的。
android 系統下不同程式 資料預設是不能共享訪問
把自己的資料通過uri的形式共享出去(檢視簡訊,檢視通訊錄聯絡人)
1.看urlmarcher.
2. 根據匹配碼 檢視增刪改查的具體實現
-
為什麼要用ContentProvider?它和sql的實現上有什麼差別?
遮蔽資料儲存的細節,對使用者透明,使用者只需要關心操作資料的uri就可以了,對應的引數 .
-
請介紹下Android中常用的五種佈局。
LinearLayout(線性佈局),RelativeLayout(相對佈局),FrameLayout(幀佈局),
AbsoluteLayout(絕對佈局),TableLayout(表格佈局)
13.談談UI中, Padding和Margin有什麼區別?
Padding 文字對邊框內間距, margin是控制元件與控制元件之間的距離,外間距
-
widget相對位置的完成在activity的哪個生命週期階段實現。
widget可以理解成桌面小控制元件,
也可以理解成 某個button, imageview這樣的控制元件…
onmeasure() // 計算 控制元件在螢幕上的位子
15.activity的生命週期。
activity主要生命週期的方法說明:
onCreate(Bundle savedInstanceState):建立activity時呼叫。設定在該方法中,還以Bundle的形式提供對以前儲存的任何狀態的訪問!
onStart():activity變為在螢幕上對使用者可見時呼叫。
onResume():activity開始與使用者互動時呼叫(無論是啟動還是重新啟動一個活動,該方法總是被呼叫的)。
onPause():activity被暫停或收回cpu和其他資源時呼叫,該方法用於儲存活動狀態的,也是保護現場,壓棧吧!
onStop():activity被停止並轉為不可見階段及後續的生命週期事件時呼叫。
onRestart():重新啟動activity時呼叫。該活動仍在棧中,而不是啟動新的活動。
onDestroy():activity被完全從系統記憶體中移除時呼叫,該方法被
16 .在Android中,怎麼節省記憶體的使用,怎麼主動回收記憶體?
儘量多使用內部類 提高程式效率
回收已經使用的資源,
合理的使用快取
合理設定變數的作用範圍 application 物件
-
dvm的程序和Linux的程序, 應用程式的程序是否為同一個概念
Dvm的程序是dalivk虛擬機器程序,每個android程式都執行在自己的程序裡面,
每個android程式系統都會給他分配一個單獨的liunx uid(user id),
每個dvm都是linux裡面的一個程序.所以說這兩個程序是一個程序.
-
談談Android的優點和不足之處。
1、開放性,開源 ophone 阿里雲( 完全相容android) 樂os
2、掙脫運營商束縛
3、豐富的硬體選擇 mtk android
4、不受任何限制的開發商
5、無縫結合的Google應用
缺點也有5處:
1、安全問題、隱私問題
2、賣手機的不是最大運營商
3、運營商對Android手機仍然有影響
4、山寨化嚴重
5、過分依賴開發商,缺乏標準配置 版本過多
-
什麼是ANR 如何避免它?
主執行緒被阻塞的時候,會出現5秒超時的異常 在Android上,如果你的應用程式有一段時間響應不夠靈敏,系統會向用戶顯示一個對話方塊,這個對話方塊稱作應用程式無響應(ANR:Application Not Responding)對話方塊。使用者可以選擇讓程式繼續執行,但是,他們在使用你的應用程式時,並不希望每次都要處理這個對話方塊。因此,在程式裡對響應效能的設計很重要,這樣,系統不會顯示ANR給使用者。
Activity 5秒 broadcast10秒
耗時的操作 worker thread裡面完成,
handler message…AsynsTask , intentservice.等…
-
android中的動畫有哪幾類,它們的特點和區別是什麼?
兩種,一種是Tween動畫、還有一種是Frame動畫。
Tween動畫,這種實現方式可以使檢視元件移動、放大、縮小以及產生透明度的變化;
另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
21.java中的soft reference是個什麼東西
StrongReference 是 Java 的預設引用實現,
它會盡可能長時間的存活於 JVM 內, 當沒有任何物件指向它時 GC 執行後將會被回收
22,udp連線和TCP的不同之處
tcp/滑動視窗協議. 擁塞控制. 可靠的連線 ,三次握手
udp 不關心資料是否達到,是否阻塞,不可靠的連線
畫面優先. tcp
流暢優先 udp
23.handler機制的原理
是一個訊息的處理者, 是滿足執行緒間的通訊,和傳遞一些資訊
Handler 先進先出原則。Looper類用來管理特定執行緒內物件之間的訊息交換(Message Exchange)。
1)Looper: 一個執行緒可以產生一個Looper物件,由它來管理此執行緒裡的Message Queue(訊息佇列)。
2)Handler: 你可以構造Handler物件來與Looper溝通,以便push新訊息到Message Queue裡;
或者接收Looper從Message Queue取出)所送來的訊息。
3) Message Queue(訊息佇列):用來存放執行緒放入的訊息。
4)執行緒:UI thread 通常就是main thread,而Android啟動程式時會替它建立一個Message Queue。
24.AsycTask與一般執行緒非同步之間的差別
1)是因為AsyncTask使用了執行緒池技術,而且其中的方法很容易實現呼叫
2)是因為AsyncTask可以呼叫相關的方法,在開啟子執行緒前和後,進行介面的更新
3)是因為一旦任務多了,不用每次都new新的執行緒,可以直接使用
-
ListView如何提高其效率?
複用convertview , 複用歷史的view物件
Static class ViewHolder
使用靜態的view物件 避免建立過多的view,減少findViewByid
非同步載入資料, 可以使用,分批或分頁載入資料, onscallLinster()監聽;
把下載後的資料快取到資料庫裡
客戶端和伺服器 協同 作戰 .
Http 請求 -
圖片的優化
非同步載入圖片
圖片的壓縮處理bitMapFactory.options
設定記憶體的大小
快取在記憶體,快取在SD卡, 取的時候先從記憶體中取 ,在去SD卡取 ,沒有的話,去網上取
27.螢幕的適配
文字使用SP ,控制元件使用dp ,weight
多佈局, 裡面加不同的dimens.xml
圖片有要求的話,採用多圖片處理
28.Activity的啟動模式
1. standard 預設標準的啟動模式, 每次startActivity都是建立一個新的activity的例項。
適用於絕大大數情況
2. singleTop 單一頂部,如果要開啟的activity在任務棧的頂部已經存在,就不會建立新的例項,
而是呼叫 onNewIntent() 方法。
應用場景: 瀏覽器書籤。 避免棧頂的activity被重複的建立,解決使用者體驗問題。
3. singletask 單一任務棧 , activity只會在任務棧裡面存在一個例項。如果要啟用的activity,在
任務棧裡面已經存在,就不會建立新的activity,而是複用這個已經存在的activity,
呼叫 onNewIntent() 方法,並且清空當前activity任務棧上面所有的activity
應用場景:瀏覽器activity, 整個任務棧只有一個例項,節約記憶體和cpu的目的
注意: activity還是執行在當前應用程式的任務棧裡面的。不會建立新的任務棧。
4. singleInstance 單態 單例模式
單一例項,整個手機作業系統裡面只有一個例項存在。不同的應用去開啟這個activity
共享 公用的同一個activity。
他會執行在自己單獨,獨立的任務棧裡面,並且任務棧裡面只有他一個例項存在。
應用場景:呼叫來電介面 InCallScreen
29.註冊廣播哪幾種方法
2種 ,
1)第一種不是常駐型廣播,也就是說廣播跟隨程式的生命週期。registerReceiver
2)第二種是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統呼叫自動執行。一種是在AndroidManifest.xml中配置廣播
30.橫豎屏切換時候activity的生命週期?
1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,
切橫屏時會執行一次,切豎屏時會執行兩次
2、設定Activity的android:configChanges="orientation"時,
切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次
3、設定Activity的android:configChanges="orientation|keyboardHidden"時,
切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法
31.如何將開啟res aw目錄中的資料庫檔案?
解答:在Android中不能直接開啟res
aw目錄中的資料庫檔案,而需要在程式第一次啟動時將該檔案複製到手機記憶體或SD卡的某個目錄中,
然後再開啟該資料庫檔案。複製的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream物件,然後將該InputStream物件中的資料寫入其他的目錄中相應檔案中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來開啟任意目錄中的SQLite資料庫檔案。
32.說說mvc模式的原理,它在android中的運用
MVC(Model_view_contraller)”模型檢視 控制器”。
MVC應用程式總是由這三個部分組成。Event(事件)導致Controller改變Model
傳遞到view上
33、 你後臺的Activity被系統回收怎麼辦:
onSaveInstanceState
34.Framework工作方式及原理,Activity是如何生成一個view的,機制是什麼。
反射 , 配置檔案
每個activity裡面都有window.callback和keyevent.callback,一些回撥的介面或者函式吧. 框架把activity創建出來就會呼叫裡面的這些回撥方法,會呼叫activity生命週期相關的方法.
setContentView();
普通的情況:
Activity建立一個view是通過 ondraw 畫出來的, 畫這個view之前呢,還會呼叫onmeasure方法來計算顯示的大小.
35.請解釋下Android程式執行時許可權與檔案系統許可權的區別。
執行時許可權Dalvik( android授權)
檔案系統 linux 核心授權
36.IntentService有何優點?
答:IntentService 的好處
* Acitivity的程序,當處理Intent的時候,會產生一個對應的Service
* Android的程序處理器現在會盡可能的不kill掉你
* 非常容易使用
-
顯式意圖和隱式意圖的區別
顯式意圖 :必須指定要啟用的元件的完整包名和類名 (應用程式之間耦合在一起)
// 一般啟用自己應用的元件的時候 採用顯示意圖
隱式意圖: 只需要指定要動作和資料就可以 ( 好處應用程式之間沒有耦合)
//啟用別人寫的應用 隱式意圖, 不需要關心對方的包名和類名
38.引入任務棧目的 :
為了記錄使用者開啟了那些activity,
記錄這些activity開啟的先後順序,
幫助維護好的使用者體驗。
39 .Android中4大元件是:
ContentProvider、Activity、BroadcastReceiver和Service
-
簡單描述下Android 數字簽名。
在Android系統中,所有安裝到系統的應用程式都必有一個數字證書,此數字證書用於標識應用程式的作者和在應用程式之間建立信任關係 Android系統要求每一個安裝進系統的應用程式都是經過數字證書籤名的,數字證書的私鑰則儲存在程式開發者的手中。Android將數字證書用來標識應用程式的作者和在應用程式之間建立信任關係,不是用來決定終端使用者可以安裝哪些應用程式。
這個數字證書並不需要權威的數字證書籤名機構認證(CA),它只是用來讓應用程式包自我認證的。
同一個開發者的多個程式儘可能使用同一個數字證書,這可以帶來以下好處。
(1)有利於程序升級,當新版程式和舊版程式的數字證書相同時,Android系統才會認為這兩個程式是同一個程式的不同版本。如果新版程式和舊版程式的數字證書不相同,則Android系統認為他們是不同的程式,併產生衝突,會要求新程式更改包名。 (2)有利於程式的模組化設計和開發。Android系統允許擁有同一個數字簽名的程式執行在一個程序中,Android程式會將他們視為同一個程式。所以開發者可以將自己的程式分模組開發,而使用者只需要在需要的時候下載適當的模組。
在簽名時,需要考慮數字證書的有效期:
(1)數字證書的有效期要包含程式的預計生命週期,一旦數字證書失效,持有改數字證書的程式將不能正常升級。
(2)如果多個程式使用同一個數字證書,則該數字證書的有效期要包含所有程式的預計生命週期。
(3)Android Market強制要求所有應用程式數字證書的有效期要持續到2033年10月22日以後。
Android數字證書包含以下幾個要點:
(1)所有的應用程式都必須有數字證書,Android系統不會安裝一個沒有數字證書的應用程式
(2)Android程式包使用的數字證書可以是自簽名的,不需要一個權威的數字證書機構簽名認證 (3)如果要正式釋出一個Android,必須使用一個合適的私鑰生成的數字證書來給程式簽名,而不能使用adt外掛或者ant工具生成的除錯證書來發布。 (4)數字證書都是有有效期的,Android只是在應用程式安裝的時候才會檢查證書的有效期。如果程式已經安裝在系統中,即使證書過期也不會影響程式的正常功能。
最後
喜歡的童鞋們請支援一下,謝謝!你的支援就是我最大的動力!!!