SIM卡的EF文件有什麼作用?
SIM卡裡的所有文件按樹來組織:
主文件MF(Master File)——主文件只有文件頭,裡面存放著整個SIM卡的控制和管理信息
專用文件DF(Dedicated File)——也是只有一個文件頭, 裡面存放著整個目錄的管理控制信息, 專用文件相當於一個目錄的根.
基本文件EF(Elementary File)——既有文件頭,也有文件體, 文件頭存放該文件的位置和控制信息, 文件體存放真正的數據, 整個SI
M卡中只有基本文件有文件體, 也只有基本文件才用來存放數據.
一條短信最長約占多少byte?
中文70(包括標點),英文160個字節
handler機制的原理?
andriod提供了 Handler 和 Looper 來滿足線程間的通信。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。
mvc模式的原理,在android中的應用?
目的:降低耦合性,使組件重復利用
mvc是model,view,controller的縮寫,mvc包含三個部分:
模型(model)對象:是應用程序的主體部分,所有的業務邏輯都應該寫在該層。
視圖(view)對象:是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶唯一可以看到的一層,接收用戶的輸入,顯示處理結果。
控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,想用用戶出發的相關事件,交給m哦得了處理。
在android中mvc的具體體現如下:
1)視圖層(view):一般采用xml文件進行界面的描述,使用的時候可以非常方便的引入,當然,如何你對android了解的比較的多了話,就一定 可以想到在android中也可以使用javascript+html等的方式作為view層,當然這裡需要進行java和javascript之間的通 信,幸運的是,android提供了它們之間非常方便的通信實現。
2)控制層(controller):android的控制層的重 任通常落在了眾多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫代碼,要通過activity交割model業務邏輯層處理, 這樣做的另外一個原因是android中的acitivity的響應時間是5s,如果耗時的操作放在這裡,程序就很容易被回收掉。
3)模型層(model):對數據庫的操作、對網絡等的操作都應該在model裡面處理,當然對業務計算等操作也是必須放在的該層的。
如何讓Activity變成一個窗口?
在AndroidManifest.xml 中定義 Activity的屬性:android :theme="@android:style/Theme.Dialog"
後台的Activity被系統回收怎麼辦?
當你的程序中某一個Activity A 在運行時中,主動或被動地運行另一個新的Activity B 這個時候A會執行
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putLong("id", 123456);
}
B 完成以後又會來找A, 這個時候就有兩種情況,一種是A被回收,一種是沒有被回收,被回收的A就要重新調用onCreate()方法,不同於直接啟動的是這回onCreate()裡是帶上參數savedInstanceState,沒被收回的就還是onResume就好了.
if(savedInstanceState != null){
long id = savedInstanceState.getLong("id");}
Intent的作用
如何退出Activity?如何安全退出已調用多個Activity的Application?
對於單一Activity的應用來說,退出很簡單,直接finish()即可。
當然,也可以用killProcess()和System.exit()這樣的方法。
Android的數據存儲方式
1、使用SharedPreferences存儲數據;
2、文件存儲數據;
3、SQLite數據庫存儲數據;
4、使用ContentProvider存儲數據;
5、網絡存儲數據;
Android常用的布局
線性/相對/絕對/網格/表格/幀布局
Android的多屏幕適配
a.在manifest裡定義你的程序支持的屏幕類型,相應代碼如下:
android:smallScreens=["true" | "false"] //是否支持小屏
android:normalScreens=["true" | "false"] //是否支持中屏
android:largeScreens=["true" | "false"] //是否支持大屏
android:xlargeScreens=["true" | "false"] //是否支持超大屏
android:anyDensity=["true" | "false"] //是否支持多種不同密度的屏幕
android:requiresSmallestWidthDp=”integer”
android:compatibleWidthLimitDp=”integer”
android:largestWidthLimitDp=”integer”/>
b.對不同大小的屏幕提供不同的layout。
比如,如果需要對大小為large的屏幕提供支持,需要在res目錄下新建一個文件夾layout-large/並提供layout。當然,也可以在res
目錄下建立layout-port和layout-land兩個目錄,裡面分別放置豎屏和橫屏兩種布局文件,以適應對橫屏豎屏自動切換。
c.對不同密度的屏幕提供不同的圖片。
應盡量使用點9格式的圖片,如需對密度為low的屏幕提供合適的圖片,需新建文件夾drawable-ldpi/,並放入合適大小的圖片。
相應的,medium對應drawable-mdpi /,high對應drawable-hdpi/,extra high對應drawable-xhdpi/。
圖片大小的確定:low:medium:high:extra high比例為3:4:6:8。舉例來說,對於中等密度(medium)的屏幕你的圖片像素大小為48×
48,那麼低密度(low)屏幕的圖片大小應為36×36,高(high)的為72×72,extra high為96×96。
ContentProvider是如何實現數據共享的?
一個程序可以通過實現一個Content provider的抽象接口將自己的數據完全暴露出去,而且Content providers是以類似數據庫中
表的方式將數據暴露。Content providers存儲和檢索數據,通過它可以讓所有的應用程序訪問到,這也是應用程序之間唯一共享
數據的方法。
要想使應用程序的數據公開化,可通過2種方法:創建一個屬於你自己的Content provider或者將你的數據添加到一個已經存在的
Content provider中,前提是有相同數據類型並且有寫入Content provider的權限。
注冊廣播有幾種方式?有何優缺點?
靜態注冊:常駐型,占資源比較大
動態注冊:優先級比較高,廣播跟隨程序的生命周期
有哪些方法可以實現前後台的數據交換,包括文字和圖片?
有哪些方法實現消息的推送?
輪詢 : 應用程序應當階段性的與服務器進行連接並查詢是否有新的消息到達,你必須自己實現與服務器之間的通信
SMS :(通過發送短信並解析短信內容來獲取服務器端的指令),這個出現的問題是很難找到免費的網關來發送短信
持久連接 : 主要是Socket通訊,這個解決了性能問題,但是耗電問題依舊沒能解決
網絡通信的方式
TCP/URL(URLConnection)/HTTP(HttpClient)/WebView/WebService
Activity啟動模式
1. standard
模式啟動模式,每次激活Activity時都會創建Activity,並放入任務棧中。
2. singleTop
如果在任務的棧頂正好存在該Activity的實例, 就重用該實例,否者就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實
例,只要不在棧頂,都會創建實例)。
3. singleTask
如果在棧中已經有該Activity的實例,就重用該實例(會調用實例的onNewIntent())。重用時,會讓該實例回到棧頂,因此在它上面
的實例將會被移除棧。如果棧中不存在該實例,將會創建新的實例放入棧中。
4. singleInstance
在一個新棧中創建該Activity實例,並讓多個應用共享改棧中的該Activity實例。一旦改模式的Activity的實例存在於某個棧中,任
何應用再激活改Activity時都會重用該棧中的實例,其效果相當於多個應用程序共享一個應用,不管誰激活該Activity都會進入同
一個應用中。
NDK是什麼
NDK是一些列工具的集合,
NDK提供了一系列的工具,幫助開發者迅速的開發C/C++的動態庫,並能自動將so和java 應用打成apk包。
NDK集成了交叉編譯器,並提供了相應的mk文件和隔離cpu、平台等的差異,開發人員只需簡單的修改mk文件就可以創建出so
描述一下android的系統架構
android系統架構分從下往上為linux 內核層、運行庫、應用程序框架層、和應用程序層
linuxkernel:負責硬件的驅動程序、網絡、電源、系統安全以及內存管理等功能。
libraries和 androidruntime:libraries:即c/c++函數庫部分,大多數都是開放源代碼的函數庫,例如webkit,該函數庫負責 android網頁浏覽器的運行,例如標准的c函數庫libc、openssl、sqlite等,當然也包括支持游戲開發2dsgl和 3dopengles,在多媒體方面有mediaframework框架來支持各種影音和圖形文件的播放與顯示,例如mpeg4、h.264、mp3、 aac、amr、jpg和png等眾多的多媒體文件格式。android的runtime負責解釋和執行生成的dalvik格式的字節碼。
applicationframework(應用軟件架構),java應用程序開發人員主要是使用該層封裝好的api進行快速開發。
applications:該層是java的應用程序層,android內置的googlemaps、e-mail、即時通信工具、浏覽器、mp3播放 器等處於該層,java開發人員開發的程序也處於該層,而且和內置的應用程序具有平等的位置,可以調用內置的應用程序,也可以替換內置的應用程序。
談談Android的IPC機制
IPC是內部進程通信的簡稱, 是共享"命名管道"的資源。Android中的IPC機制是為了讓Activity和Service之間可以隨時的進行交互,故在Android中該機制,只適用於Activity和Service之間的通信,類似於遠程方法調用,類似於C/S模式的訪問。通過定義AIDL接口文件來定義IPC接口。Servier端實現IPC接口,Client端調用IPC接口本地代理。
java中如何引用本地語言?
可以用JNI接口
DDMS和TraceView的區別?
DDMS是一個程序執行查看器,在裡面可以看見線程和堆棧等信息,TraceView是程序性能分析器
android中的動畫有哪幾類,它們的特點和區別是什麼?
兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式可以使視圖組件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。
Android dvm的進程和Linux的進程, 應用程序的進程是否為同一個概念
DVM指dalivk的虛擬機。每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。而每一個DVM都是在Linux 中的一個進程,所以說可以認為是同一個概念。
嵌入式操作系統內存管理有哪幾種, 各有何特性
頁式,段式,段頁,用到了MMU,虛擬空間等技術
什麼是嵌入式實時操作系統, Android 操作系統屬於實時操作系統嗎?
嵌入式實時操作系統是指當外界事件或數據產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,並控制所有實時任務協調一致運行的嵌入式操作系統。主要用於工業控制、 軍事設備、 航空航天等領域對系統的響應時間有苛刻的要求,這就需要使用實時系統。又可分為軟實時和硬實時兩種,而android是基於linux內核的,因此屬於軟實時。
Activity的生命周期
和其他手機 平台 的應用 程序 一樣,Android的應用程序 的生命周期是被統一掌控 的,也就是說我們寫的應用程序命運掌握在別人(系統)的手裡,我們不能改變它,只能學習 並適應它。簡單地說一下為什麼是這樣:我們手機在運行 一個應用程序的時候,有可能打進來電話發進來短信 ,或者沒有電了,這時候程序都會被中斷,優先去服務電話的基本功能 ,另外系統也不允許你占用太多資源 ,至少要保證電話功能吧,所以資源不足的時候也就有可能被干掉。
在一個Activity正常啟動的過程中,他們被調用的順序是 onCreate -> onStart -> onResume, 在Activity被干掉的時候順序是onPause -> onStop -> onDestroy ,這樣就是一個完整的生命周期,但是有人問了 ,程序正運行著呢來電話了,這個程序咋辦?中止了呗,如果中止的時候新出的一個Activity是全屏的那麼:onPause->onStop ,恢復的時候onStart->onResume ,如果打斷 這個應用程序的是一個Theme為Translucent
或者Dialog 的Activity那麼只是onPause ,恢復 的時候onResume 。
詳細介紹一下這幾個方法中系統在做什麼以及我們應該做什麼:
onCreate: 在這裡創建界面 ,做一些數據 的初始化工作
onStart: 到這一步變成用戶可見不可交互 的
onResume: 變成和用戶可交互 的,(在activity 棧系統通過棧的方式管理這些個
Activity的最上面,運行完彈出棧,則回到上一個Activity)
onPause: 到這一步是可見但不可交互 的,系統會停止動畫 等消耗CPU 的事情從上文的描述已經知道,應該在這裡保存
你的一些數據,因為這個時候你的程序的優先級降低,有可能被系統收回。在這裡保存的數據,應該在
onResume裡讀出來,注意:這個方法裡做的事情時間要短,因為下一個activity不會等到這個方法完成才啟動
onstop: 變得不可見 ,被下一個activity覆蓋了
onDestroy: 這是activity被干掉前最後一個被調用方法了,可能是外面類調用finish方法或者是系統為了節省空間將它暫
時性的干掉,可以用isFinishing()來判斷它,如果你有一個Progress Dialog在線程中轉動,請在onDestroy裡把他cancel
掉,不然等線程結束的時候,調用Dialog的cancel方法會拋異常的。
onPause,onstop, onDestroy,三種狀態 下 activity都有可能被系統干掉為了保證程序的正確性,你要在onPause()裡
寫上持久層操作的代碼,將用戶編輯的內容都保存到存儲介質上(一般都是數據庫 )。實際工作中因為生命周期的變化而
帶來的問題也很多,比如你的應用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停還是殺掉還
是數據 回滾,是吧?因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般都是采用
Android的消息機制 [Handler,Message]來處理多線程和界面交互的問題。