Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android中最常問到的面試題

Android中最常問到的面試題

編輯:關於Android編程

Android中最常問到的面試題

小武:

方法重載與覆蓋的區別?( Overload與Override的區別)

答:方法的重載屬於編譯時多態,方法名相同參數列表不同,返回值必須相同或都沒有返回值類型。方法的覆蓋屬於運行時多態,子類覆蓋父類的方法,子類指向父類引用,在調用方法的時候用父類的引用調用。

String和StringBuffer的區別

答:STRING的長度是不可變的,STRINGBUFFER的長度是可變的。如果你對字符串中的內容經常進行操作,特別是內容要修改時,那麼使用StringBuffer,如果最後需要String,那麼使用StringBuffer的toString()方法。

字符串“abcde”通過寫一個函數不讓調用第三方的字符串,實現一個字符串倒序,比如字符串“abcde” 變成“edcba”

答:String src = "ABCDEF ";
String dst = new StringBuffer(src).reverse().toString();

注:String常用方法:http://blog.csdn.net/lishiyuzuji/article/details/8135554

抽象類與接口的區別(abstract與interface的區別)

答:abstract可以修飾抽象方法,而一個類只要有一個抽象方法,就必須用abstract定義該類,即抽象類。

用interface修飾的類,裡面的方法都是抽象方法,因此在定義接口的時候,可以直接不加那些修飾,系統會默認的添上去。接口裡面的字段都是公有常量,即public static final修飾的字段。

集合的實現類與區別?

答:Collection接口,集合結構總的父接口,有兩個子接口list和set

List接口 元素有序可重復.

實現類有:ArrayList數組實現輕量級,運行快,線程不安全。JDK1.2查詢快

Vector數組實現重量級,運行慢,線程安全。JDK1.0

LinkedList鏈表實現 常用堆棧與隊列的實現 增刪操作快

Set接口 元素無序不可重復

實現類有:HashSet,底層用hashCode()算法實現,保證元素的無序唯一,自定義對象存進HashSet為了保證元素內容不重復需要覆蓋hashCode()與equals()方法。

SortedSet(不重要)元素有序(Unicode升序)唯一

TreeSet要求元素有序,自定義的對象需要實現Comparable接口的compareTo(object o)方法

Map(接口):與Collection接口無關,有一個子接口SortedMap特點:元素是key-value, key

唯一,無序; value可重復

實現類: HashMap輕量級 線程不安全的,允許key或value為null JDK1.2

HashTable重量級 線程安全的 不允許key或value為null JDK1.0

Properties是HashTable的子類,主鍵和值都是字符串

SortedMap:(不重要)

特點: key唯一,有序(Unicode升序)

實現類:TreeMap

線程有幾種狀態,分別是哪些?(調用run()和調用start()的區別)

答:1)、新建狀態(New):新創建了一個線程對象。

2)、就緒狀態(Runnable):線程對象創建後,其他線程調用了該對象的start()方法。該狀態的線程位於可運行線程池中,變得可運行,等待獲取CPU的使用權。

3)、運行狀態(Running):就緒狀態的線程獲取了CPU執行run()方法,。

4)、阻塞狀態(Blocked):阻塞狀態是線程因為某種原因放棄CPU使用權,暫時停止運行。直到線程進入就緒狀態,才有機會轉到運行狀態。阻塞的情況分三種:

(一)、等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。

(二)、同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程占用,則JVM會把該線程放入鎖池中。

(三)、其他阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。

5)、死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。

當調用start方法的時候,該線程就進入就緒狀態。等待CPU進行調度執行,此時還沒有真正執行線程。

當調用run方法的時候,是已經被CPU進行調度,執行線程的主要任務。

線程的實現方式

答:線程的實現有兩種方式,一是繼承Thread類,二是實現Runnable接口

sleep()與wait()的區別

答:1.這兩個方法來自不同的類分別是,sleep來自Thread類,和wait來自Object

類。

2.最主要是sleep方法沒有釋放鎖,而wait方法釋放了鎖,使得其他線程可

以使用同步控制塊或者方法。sleep不出讓系統資源;wait是進入線程等待池

等待,出讓系統資源,其他線程可以占用CPU。一般wait不會加時間限制,

因為如果wait線程的運行資源不夠,再出來也沒用,要等待其他線程調用

notify/notifyAll喚醒等待池中的所有線程,才會進入就緒隊列等待OS分配系

統資源。sleep(milliseconds)可以用時間指定使它自動喚醒過來,如果時間不到

只能調用interrupt()強行打斷。

3.wait,notify和notifyAll只能在同步控制方法或者同步控制塊裡面使用,而

sleep可以在任何地方使用

4. Sleep需要捕獲異常,而wait不需要

Final、finally、finanlize()的區別

答:final?用於聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不

可繼承。

finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉文件等。

android系統架構?

答:1)應用程序層java語言 應用程序開發

應用程序框架層java語言OS定制framework層開發系統運行庫層C C++實現so庫Linux內核層Activity生命周期?保存activity的一些信息在哪個生命周期方法中?

答:共有七個周期函數:

void onCreate(Bundle savedInstanceState)第一次創建時調用

void onStart()被用戶可見時調用

void onRestart()當Activity處於stop狀態又被重新啟動時調用

void onResume()當獲得焦點即可與用戶交互時調用

void onPause()當失去焦點時調用

void onStop()當不可見時調用

void onDestroy()當銷毀時調用

Android的四大組件是什麼?它們的作用是什麼?

答:Android有四大組件:Activity、Service、Broadcast Receiver、Content Provider。

Activity :應用程序中,一個Activity通常就是一個單獨的屏幕,它上面可以顯示一些控件也可以監聽並處理用戶的事件做出響應。Activity之間通過Intent進行通信。

Service 服務:一個Service 是一段長生命周期的,沒有用戶界面的程序,可以用來開發如監控類程序。

BroadcastReceive廣播接收器:你的應用可以使用它對外部事件進行過濾只對感興趣的外部事件(如當電話呼入時,或者數據網絡可用時)進行接收並做出響應。廣播接收器沒有用戶界面。然而,它們可以啟動一個activity或serice 來響應它們收到的信息。

Content Provider內容提供者 :主要用於多個應用間數據共享。這些數據可以存儲在文件系統中或SQLite數據庫。

Android中的五種存儲方式及其應用場景

答:1)SharedPreferences

存儲路徑:(data/data/packagename/shares_prefs), 輕量級存儲,以鍵值對的形式存儲在xml中,一般用來保存應用中的設置屬性

2)文件存儲 SD卡存儲多媒體文件, 文件緩存

3) Sqlite數據庫 存儲路徑:(data/data/packagename/databases), 一種嵌入式數據庫,支持sql語言,存儲大量結構性數據

4)ContentProvider 進程(應用程序)間數據共享,數據源可以是sqlite,也可以是xml,相關類: ContentResolver(內容解析器), ContentObserver(數據 觀察者)

5) 網絡存儲 天氣數據的xml,json格式等等,通過HttpUrlConnection,HttpClient,或者SOAP協議獲取數據

 

什麼是ANR如何避免它?(Android線程間的通信方式?

答:ANR:Application Not Responding(應用程序無響應).當出現下列情況時,Android就會顯示ANR對話框了:對輸入事件(如按鍵、觸摸屏事件)的響應超過5秒意向接受器(intentReceiver)超過10秒鐘仍未執行完畢Android應用程序完全運行在一個獨立的線程中(例如main)。這就意味著,任何在主線程中運行的,需要消耗大量時間的操作都會引發ANR。

解決方案有兩種:

1.AsyncTask異步任務中,doInBackground()和onPostExecute(Result)兩個方法非常重要

doInBackground() 這個方法運行在後台線程中,主要負責執行那些很耗時的操作,如移動護理系統中的網絡連接、解析XML等操作。該方法必須重載。

onPostExecute(Result) 這個方法也運行於UI線程,在doInBackground(Params…)方法執行後調用,該方法用於處理後台任務執行後返回的結果。

2. 子thread + handler

 

Handler的運行機制(運行原理)(Handler,Looper,MessageQueue,Message之間的關系)

一個Handler允許你發送和處理Message和Runable對象,每個線程都有自己的Looper,每個Looper中封裝著MessageQueue。Looper負責不斷的從自己的消息隊列裡取出隊頭的任務或消息執行。每個handler也和線程關聯,Handler負責把Message和Runable對象傳遞給MessageQueue(用到post,sendMessage等方法),而且在這些對象離開MessageQueue時,Handler負責執行他們(用到handleMessage方法)。
其中Message類就是定義了一個信息,這個信息中包含一個描述符和任意的數據對象,這個信息被用來傳遞給Handler.Message對象提供額外的兩個int域和一個Object域。

自定義組件的實現思路

答: Android自定義組件有三種實現思路:

1)繼承某個現有組件,在其基礎上添加額外功能,如繼承Gallery實現CoverFlow效果

2) 復合型組件定義:繼承某個Layout,實現復合組件自定義,如TextView和EditText組合實現登錄注冊組件

3)繼承View,實現onDraw()方法,實現自己繪制組件,如翻頁效果組件

Activity四種啟動模式

在AndroidManifest.xml清單文件中的標簽中通過android:launchMode設置Activity啟動模式

standard 默認值, 表示在startActivity時即創建其實例

singleTop 首先檢查棧頂是否有該Activity實例,有責返回,無責創建其實例

singleTask 檢查整個堆棧有無該Activity實例,有責返回,無責創建其實例

singleInstance 單實例模式, 一個Activity實例獨享一個任務堆棧, 並且只能有一個堆棧中有該Activity的實例

Androidasset文件夾和raw文件夾區別?

答:res/raw和assets的相同點:

兩者目錄下的文件在打包後會原封不動的保存在apk包中,不會被編譯成二進制。

res/raw和assets的不同點:

1)res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即 R.raw.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類。

2)res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾

3)讀取文件資源舉例:

讀取res/raw下的文件資源,通過以下方式獲取輸入流來進行寫操作

InputStream is = getResources().openRawResource(R.raw.filename);

讀取assets下的文件資源,通過以下方式獲取輸入流來進行寫操作

AssetManager am = null;

am = getAssets();

InputStream is = am.open("filename");

Android程序入口如何判斷?

action節點中的android.intent.action.MAIN表明它所在的Activity是整個應用程序的入口點

1.什麼是WebView?

WebView是一個使用WebKit引擎的浏覽器組件,用來加載網頁。

2. WebView中加載網頁的兩種方式?

loadUrl(url)通過url地址加載互聯網或本地網頁

如:loadUrl("http://www.baidu.com");

loadUrl("file:///android_asset/html/index.html");

loadData(data,type,encoding)直接加載網頁內容,容易亂碼,一般用loadDataWithBaseURL代替

3. WebView的三個輔助類是什麼?

WebSettings、WebViewClient、WebChromeClient

4. WebSettings的作用是什麼?

設置WebView的一些屬性、狀態等,例如允許使用javascript,允許使用緩存,允許使用內置的縮放組件

setJavaScriptEnabled(true);設置支持js

5. WebViewClient的作用是什麼?

主要幫助WebView處理各種通知、請求事件(例如,點擊鏈接時候如何顯示界面,頁面開始加載,加載完畢之後有何動作等)

shouldOverrideUrlLoading() onPageStarted() onPageFinished()

6. WebChromeClient的作用是什麼?

輔助WebView處理Javascript的對話框、網站圖標、網站Title、加載進度等

核心方法有onJsAlert() onJsConfirm() onJsPrompt() onProgressChanged() onReceivedIcon()

onReceivedTitle()

7. WebViewClientshouldOverrideUrlLoading方法作用

shouldOverrideUrlLoading方法控制超連接是否在當前WebView中打開。

8. android中如何調用js中的方法?

loadUrl("javascript:test()");

9.頁面js中調用android客戶端的方法實現步驟?

1,添加javascript支持(webSettings.setJavaScriptEnabled(true);)

2,暴露一個java對象給js,使得js可以直接調用該實例中的公有方法,

(webview.addJavascriptInterface(object,"name");)

3,加載頁面(webview.loadUrl(url);}

4,頁面可以通過別名使用(window.name.方法名)

11. TCPUDP的區別。

TCP---傳輸控制協議,提供的是面向連接、可靠的字節流服務,傳輸數據前經過“三次握手”建立連接,保證數據傳輸的可靠性,但效率比較低。一般用於對於數據傳輸安全性較高的場合。

UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議,面向無連接。UDP不提供可靠性,數據傳輸可能發生錯序,丟包,但效率較高。一般用於對於實時性要求較高的場合。

GPS定位與網絡定位有何區別?

GPS定位需設置權限android.permission.ACCESS_LOCATION_FINE

網絡定位需設置權限android.permission.ACCESS_LOCATION_COARSE

即GPS定位比網絡定位在精確度方面更精准,但在速度方面稍差一些,而且GPS定位適合在室外環境下使用,網絡定位在室內,室外都可以。

解釋一下正向地理編碼和反向地理編碼(地址解析和逆地址解析)

正向地理編碼是指將通過地址檢索地理坐標點,即經緯度

反向地理編碼是指通過坐標點檢索詳細地址

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved