*45.描述下橫豎屏切換時候 activity 的生命週期
不設置Activity的android:configChanges時,切屏會從新調用各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次.
設置Activity的android:configChanges="orientation"時,切屏仍是會從新調用各個生命週期,切橫、豎屏時只會執行一次.
設置Activity的android:configChanges="orientation|keyboardHidden"時,切屏不會從新調用各個生命週期,只會執行onConfigurationChanged方法.
46.android 中的動畫有哪幾種,它們的特色和區別是什麼 ?
兩種,一種是補間動畫(Tween)動畫、還有一種是幀動畫(Frame)動畫。Tween動畫,這種實現方式可使視圖組件移動、放大、縮小以及產生透明度的變化;另外一種Frame動畫,傳統的動畫方法,經過順序的播放排列好的圖片來實現,相似電影。
47.一條最長的短信息約佔多少 byte?
140byte,70個漢字。
48.描述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。
49.如何將 SQLite 數據庫 (dictionary.db 文件 ) 與 apk 文件一塊兒發佈 ?
能夠將dictionary.db文件複製到Eclipse Android工程中的res\raw目錄中。全部在res\raw目錄中的文件不會被壓縮,這樣能夠直接提取該目錄中的文件。
使用openDatabase方法來打開數據庫文件,若是該文件不存在,系統會自動建立/sdcard/dictionary目錄,並將res\raw目錄中的 dictionary.db文件複製到/sdcard/dictionary目錄中
50.說說 android 中 mvc 的具體體現
mvc是model,view,controller的縮寫,mvc包含三個部分:
模型(model)對象:是應用程序的主體部分,全部的業務邏輯都應該寫在該層。
視圖(view)對象:是應用程序中負責生成用戶界面的部分。也是在整個mvc架構中用戶惟一能夠看到的一層,接收用戶的輸入,顯示處理結果。
控制器(control)對象:是根據用戶的輸入,控制用戶界面數據顯示及更新model對象狀態的部分,控制器更重要的一種導航功能,響應用戶出發的相關事件,交給m層處理。
android鼓勵弱耦合和組件的重用,在android中mvc的具體體現以下:
1)視圖(view):通常採用xml文件進行界面的描述,使用的時候能夠很是方便的引入。
2)控制層(controller):android的控制層的重任一般落在了衆多的acitvity的肩上,這句話也就暗含了不要在acitivity中寫過多的代碼,要經過activity交割model業務邏輯層處理,這樣作的另一個緣由是android中的acitivity的響應時間是5s,若是耗時的操做放在這裏,程序就很容易被回收掉。
3)模型層(model):對數據庫的操做、對網絡等的操做都應該在model裏面處理,固然對業務計算等操做也是必須放在的該層的。
51.請介紹下 Android 中經常使用的五種佈局
幀佈局(FrameLayout)
線性佈局(LinearLayout)
表格佈局(TableLayout)
相對佈局(RelativeLayout)
絕對佈局(AbsoluteLayout)
52.如何啓用 Service ,如何停用 Service
1)startService用於啓動Service、stopService中止Service。
2)bindService綁定Service,unbindService解除Service的綁定。
53.如何優化ListView
一、若是自定義適配器,那麼在getView方法中要考慮方法傳進來的參數contentView是否爲null,若是爲null就建立contentView並返回,若是不爲null則直接使用。在這個方法中儘量少建立view。
二、給contentView設置tag(setTag()),傳入一個viewHolder對象,用於緩存要顯示的數據,能夠達到圖像數據異步加載的效果。
三、若是listview須要顯示的item不少,就要考慮分頁加載。好比一共要顯示100條或者更多的時候,咱們能夠考慮先加載20條,等用戶拉到列表底部的時候再去加載接下來的20條。
54.描述4 種 activity 的啓動模式
1)standard :系統的默認模式,一次跳轉即會生成一個新的實例。假設有一個activity命名爲MainActivity,執行語句:
startActivity(new Intent(MainActivity.this, MainActivity.class))後,MainActivity將跳轉到另一個MainActivity,也就是如今的Task棧裏面有MainActivity的兩個實例。按返回鍵後你會發現仍然是在MainActivity(第一個)裏面。
2)singleTop:singleTop 跟standard 模式比較相似。若是已經有一個實例位於Activity棧的頂部時,就不產生新的實例,而只是調用Activity中的newInstance()方法。若是不位於棧頂,會產生一個新的實例。例:當MainActivity爲 singleTop 模式時,執行跳轉後棧裏面依舊只有一個實例,若是如今按返回鍵程序將直接退出。
3)singleTask: singleTask模式和後面的singleInstance模式都是隻建立一個實例的。在這種模式下,不管跳轉的對象是否是位於棧頂的activity,程序都不會生成一個新的實例(固然前提是棧裏面已經有這個實例)。這種模式至關有用,在之後的多activity開發中,常常會由於跳轉的關係致使同個頁面生成多個實例,這個在用戶體驗上始終有點很差,而若是你將對應的activity聲明爲 singleTask 模式,這種問題將不復存在。
4)singleInstance: 設置爲 singleInstance 模式的 activity 將獨佔一個task(感受task能夠理解爲進程),獨佔一個task的activity與其說是activity,倒不如說是一個應用,這個應用與其餘activity是獨立的,它有本身的上下文activity。
55.什麼是Intent,如何使用?
Android基本的設計理念是鼓勵減小組件間的耦合,所以Android提供了Intent (意圖) ,Intent提供了一種通用的消息系統,它容許在你的應用程序與其它的應用程序間傳遞Intent來執行動做和產生事件。使用Intent能夠激活Android應用的三個核心組件:活動、服務和廣播接收器。
經過startActivity() orstartActivityForResult()啓動一個Activity;
過 startService() 啓動一個服務,或者經過bindService() 和後臺服務交互;
經過廣播方法(好比 sendBroadcast(),sendOrderedBroadcast(),sendStickyBroadcast())發給broadcast receivers
56.Android用的數據庫是什麼樣的?它和sql有什麼區別?爲何要用ContentProvide?它和sql的實現上有什麼差異?
Adnroid用的是SQLite數據庫。它和其餘網絡數據庫相似,也是經過SQL對數據進行管理。SQLite的操做很是簡單,包括數據類型在建表時也能夠不指定。
使用ContentProvider 能夠將數據共享給其餘應用,讓除本應用以外的應用也能夠訪問本應用的數據。它的底層是用SQLite 數據庫實現的,因此其對數據作的各類操做都是以Sql實現,只是在上層提供的是Uri。
57.經過Intent傳遞一些二進制數據的方法有哪些?
1)使用Serializable接口實現序列化,這是Java經常使用的方法。
2)實現Parcelable接口,這裏Android的部分類好比Bitmap類就已經實現了,同時Parcelable在Android AIDL中交換數據也很常見的。
58.對一些資源以及狀態的操做保存,最好是保存在生命週期的哪一個函數中進行?
onResume()恢復數據、onPause()保存數據。