[转载]android一些、面试题
1.??? 請描述下Activity的生命周期。
?????必調用的三個方法:onCreate() --> onStart() --> onResume(),用AAA表示
(1)父Activity啟動子Activity,子Actvity退出,父Activity調用順序如下
AAA --> onFreeze() --> onPause() --> onStop() --> onRestart() --> onStart(),onResume() …
(2)用戶點擊Home,Actvity調用順序如下
AAA --> onFreeze() --> onPause() --> onStop() -- Maybe --> onDestroy() – Maybe
(3)調用finish(), Activity調用順序如下
AAA --> onPause() --> onStop() --> onDestroy()
(4)在Activity上顯示dialog, Activity調用順序如下
AAA
(5)在父Activity上顯示透明的或非全屏的activity,Activity調用順序如下
AAA --> onFreeze() --> onPause()
(6)設備進入睡眠狀態,Activity調用順序如下
AAA --> onFreeze() --> onPause()
2.??? 如果后臺的Activity由于某原因被系統回收了,如何在被系統回收之前保存當前狀態?
????? onSaveInstanceState()
????? 當你的程序中某一個Activity A在運行時,主動或被動地運行另一個新的Activity B,這個時候A會執行onSaveInstanceState()。B完成以后又會來找A,這個時候就有兩種情況:一是A被回收,二是A沒有被回收,被回收的A就要重新調用onCreate()方法,不同于直接啟動的是這回onCreate()里是帶上了參數savedInstanceState;而沒被收回的就直接執行onResume(),跳過onCreate()了。?
3.??? 如何將一個Activity設置成窗口的樣式。
????? 在AndroidManifest.xml 中定義Activity的地方一句話android:theme="@android:style/Theme.Dialog"或android:theme="@android:style/Theme.Translucent"就變成半透明的
4.??? 如何退出Activity?如何安全退出已調用多個Activity的Application?
對于單一Activity的應用來說,退出很簡單,直接finish()即可。
當然,也可以用killProcess()和System.exit()這樣的方法。
http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx
1、拋異常強制退出:
該方法通過拋異常,使程序Force Close。
驗證可以,但是,需要解決的問題是,如何使程序結束掉,而不彈出Force Close的窗口。
2、記錄打開的Activity:
每打開一個Activity,就記錄下來。在需要退出時,關閉每一個Activity即可。
3、發送特定廣播:
在需要結束應用時,發送一個特定的廣播,每個Activity收到廣播后,關閉即可。
4、遞歸退出
在打開新的Activity時使用startActivityForResult,然后自己加標志,在onActivityResult中處理,遞歸關閉。
除了第一個,都是想辦法把每一個Activity都結束掉,間接達到目的。
但是這樣做同樣不完美。
你會發現,如果自己的應用程序對每一個Activity都設置了nosensor,在兩個Activity結束的間隙,sensor可能有效了。
但至少,我們的目的達到了,而且沒有影響用戶使用。
為了編程方便,最好定義一個Activity基類,處理這些共通問題。
5.??? 請介紹下Android中常用的五種布局。
FrameLayout(框架布局),LinearLayout (線性布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)
6.??? 請介紹下Android的數據存儲方式。
Android提供了4種方式存儲數據:
--使用SharedPreferences存儲數據;------------------解析的XML文件用來存儲。
--文件存儲數據;----------------------輸入輸出流
--SQLite數據庫存儲數據;
--使用ContentProvider存儲數據;--------------可以存儲在SQLite里面,也可以存儲在內容解析器(Android自帶的一個解析類)里面。
7.??? 請介紹下ContentProvider是如何實現數據共享的。
創建一個屬于你自己的Content provider或者將你的數據添加到一個已經存在的Content provider中,前提是有相同數據類型并且有寫入Content provider的權限。
8.??? 如何啟用Service,如何停用Service。
服務類繼承自service清單文件中注冊 enabled屬性設為true
開始一個服務使用startservice方法,停止一個服務使用stopservice方法
9.??? 注冊廣播有幾種方式,這些方式有何優缺點?請談談Android引入廣播機制的用意。
引入廣播機制可以方便幾大組件的信息和數據交互。
b:程序間互通消息(例如在自己的應用程序內監聽系統來電)
c:效率上(參考UDP的廣播協議在局域網的方便性)
d:設計模式上(反轉控制的一種應用,類似監聽者模式)
?
10.??? 請解釋下在單線程模型中Message、Handler、Message Queue、Looper之間的關系。
android提供了 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。
?
11.??? AIDL的全稱是什么?如何工作?能處理哪些類型的數據?
Android Interface Define Language見aidl的筆記
12.??? 請解釋下Android程序運行時權限與文件系統權限的區別。
?
?
13.??? 系統上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?請說明原由。
14.???有一個一維整型數組int[]data保存的是一張寬為width,高為height的圖片像素值信息。請寫一個算法,將該圖片所有的白色不透明(0xffffffff)像素點的透明度調整為50%。
15.??? 你如何評價Android系統?優缺點。
5、一條最長的短信息約占多少byte?
中文70(包括標點),英文160,160個字節。
?
ANR:Application Not Responding,五秒。把耗時量大的任務放到新建的子線程中。使用這種方法涉及你的應用程序,能夠保證你的程序對輸入保持良好的響應,從而避免因為輸入事件超過5秒鐘不被處理而產生的ANR。
16.Intentservice的 好處Activity的進程,當處理intent的時候,會產生一個對應的Service
Android的進程處理器現在回盡可能的不kill掉你
?
?
17.android中線程的處理方法
每當一個程序第一次啟動時候都會啟動一個main thread 該線程主要處理與UI相關的事件,比如按鍵事件。
子線程和ui的更新通過 handler處理msg消息隊列使用sendmessage方法或者post方法post方法發送的是一個runnable對象。
Looper是每條線程里的message queue的管家。因為子線程里沒有mq所以調用looper里的getMainlooper方法這樣得到的主線程的looper不為null。
Looper。Loop方法運行開始后,循環的按照接受順序取出非空的mq
當sendmessage方法執行時 該函數設置了那個msg對象的target屬性是當前的hander對象
隨后looper取出了那個msg則調用該msg的target只想的handler的dispatchMessage方法
在該方法里用戶指定三個判斷優先級由高到低
1)? meg里面的callback方法實現了一個runnable接口run函數做處理工作
2)? handler里面的mcallback指向的一個實現了callback接口的對象由handlemessage處理
3)? 處理消息handler對象對應的類繼承并且實現了其中handlemessage函數通過這個實現的handleMessage函數處理消息
最后handler處理完message對象之后looper設置該msg對象為null以便回收
主線程和子線程如何交互最終誰來處理信息?
判斷handler對象里面的looper對象屬于哪條線程的則由該線程執行
1)? 當handler對象的構造函數為空時,說明looper是主線程的
?
?
18.GBK? GB2312? UTF8之間的區別
UTF8它對英文使用8位(即一個字節),中文使用24為(三個字節)來編碼
GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用雙字節來表示
GB2312和GBK是一樣的
19. 如何將SQLite數據庫(dictionary.db文件)與apk文件一起發布?
解答:可以將dictionary.db文件復制到Eclipse Android工程中的res aw目錄中。所有在res aw目錄中的文件不會被壓縮,這樣可以直接提取該目錄中的文件。
?
20.在Android中不能直接打開res aw目錄中的數據庫文件,而需要在程序第一次啟動時將該文件復制到手機內存或SD卡的某個目錄中,然后再打開該數據庫文件。復制的基本方法是使用getResources().openRawResource方法獲得res aw目錄中資源的 InputStream對象,然后將該InputStream對象中的數據寫入其他的目錄中相應文件中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來打開任意目錄中的SQLite數據庫文件
?
4、簡要解釋一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver
答:一個activity呈現了一個用戶可以操作的可視化界面
一個service不包含可見的用戶界面,可以在后臺無限運行。可以連接到一個正在運行的服務中,連接后可以通過服務中的接口對其通信
一個broadcast receiver 是一個接收廣播消息并做出回應的組件。廣播接收者沒有界面
一個intent是一個intent對象,他保存了消息的內容。對于activity和service來說,它指定了請求的操作名稱和待操作數據的URI。Intent對象可以顯式的指定一個目標組件。如果這樣的話,android會找到這個component(基于manifest文件中的聲明)并激活它。但如果一個目標不是顯式指定的,android必須找到響應intent的最佳component。是通過將Intent對象和目標的intent filter相比較來完成這一工作的。一個component的intent filter告訴android該component能處理的intent。intent filter也是在manifest文件中聲明的.
?
?onPause,onstop, onDestroy,三種狀態 下 activity都有可能被系統干掉
為了保證程序的正確性,你要在onPause()里寫上持久層操作的代碼,將用戶編輯的內容都保存到存儲介質上(一般都是數據庫 )。實際工作中因為生命周期的變化而帶來的問題也很多,比如你的應用程序起了新的線程在跑,這時候中斷了,你還要去維護那個線程,是暫停還是殺掉還是數據回滾,是吧?因為Activity可能被殺掉,所以線程中使用的變量和一些界面元素就千萬要注意了,一般我都是采用Android的消息機制 [Handler,Message]來處理多線程和界面交互的問題。這個我后面會講一些,最近因為這些東西頭已經很大了,等我理清思緒再跟大家分享。
?
轉載于:https://www.cnblogs.com/liuzhuqing/archive/2012/07/03/7480801.html
總結
以上是生活随笔為你收集整理的[转载]android一些、面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: System.DBNull.Value与
- 下一篇: Android开发之多点触摸(Multi