Android面试题(五) --重要
46. 注冊(cè)廣播有幾種方式,這些方式有何優(yōu)缺點(diǎn)?請(qǐng)談?wù)?Android 引入廣播機(jī)制的用意。
?Android 廣播機(jī)制(兩種注冊(cè)方法) 在 android 下,要想接受廣播信息,那么這個(gè)廣播接收器就得我們自己來(lái)實(shí)現(xiàn)了,我們可以 繼承 BroadcastReceiver,就可以有一個(gè)廣播接受器了。有個(gè)接受器還不夠,我們還得重寫(xiě) BroadcastReceiver 里面的 onReceiver 方法,當(dāng)來(lái)廣播的時(shí)候我們要干什么,這就要我們自己 來(lái)實(shí)現(xiàn),不過(guò)我們可以搞一個(gè)信息防火墻。具體的代碼: public class SmsBroadCastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Object[] object = (Object[])bundle.get("pdus"); SmsMessage sms[]=new SmsMessage[object.length]; for(int i=0;i<object.length;i++) { sms[0] = SmsMessage.createFromPdu((byte[])object[i]); Toast.makeText(context, "來(lái)自"+sms[i].getDisplayOriginatingAddress()+" 的消 息是:"+sms[i].getDisplayMessageBody(), Toast.LENGTH_SHORT).show(); } //終止廣播, 在這里我們可以稍微處理, 根據(jù)用戶輸入的號(hào)碼可以實(shí)現(xiàn)短信防火墻。 abortBroadcast(); } } 當(dāng)實(shí)現(xiàn)了廣播接收器,還要設(shè)置廣播接收器接收廣播信息的類型,這里是信息: android.provider.Telephony.SMS_RECEIVED 我們就可以把廣播接收器注冊(cè)到系統(tǒng)里面, 可以讓系統(tǒng)知道我們有個(gè)廣播接收器。 這里有 兩種,一種是代碼動(dòng)態(tài)注冊(cè): //生成廣播處理 smsBroadCastReceiver = new SmsBroadCastReceiver(); //實(shí)例化過(guò)濾器并設(shè)置要過(guò)濾的廣播 IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED"); //注冊(cè)廣播 BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter); 一種是在 AndroidManifest.xml 中配置廣播 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="spl.broadCastReceiver" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".BroadCastReceiverActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!--廣播注冊(cè)--> <receiver android:name=".SmsBroadCastReceiver"> <intent-filter android:priority="20"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver> </application> <uses-sdk android:minSdkVersion="7" /> <!-- 權(quán)限申請(qǐng) --> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> </manifest> 兩種注冊(cè)類型的區(qū)別是: 1)第一種不是常駐型廣播,也就是說(shuō)廣播跟隨程序的生命周期。 2)第二種是常駐型,也就是說(shuō)當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來(lái),程序也會(huì)被系 統(tǒng)調(diào)用自動(dòng)運(yùn)行。
?
47. 請(qǐng)解釋下在單線程模型中 Message、Handler、Message Queue、Looper 之間的關(guān)系。 Handler 簡(jiǎn)介: 一個(gè) Handler 允許你發(fā)送和處理 Message 和 Runable 對(duì)象,這些對(duì)象和一個(gè)線程的 MessageQueue 相關(guān)聯(lián)。 每一個(gè)線程實(shí)例和一個(gè)單獨(dú)的線程以及該線程的 MessageQueue 相關(guān) 聯(lián)。當(dāng)你創(chuàng)建一個(gè)新的 Handler 時(shí),它就和創(chuàng)建它的線程綁定在一起了。這里,線程我們也 可以理解為線程的 MessageQueue。從這一點(diǎn)上來(lái)看,Handler 把 Message 和 Runable 對(duì)象傳 遞給 MessageQueue,而且在這些對(duì)象離開(kāi) MessageQueue 時(shí),Handler 負(fù)責(zé)執(zhí)行他們。 Handler 有兩個(gè)主要的用途: (1)確定在將來(lái)的某個(gè)時(shí)間點(diǎn)執(zhí)行一個(gè)或者一些 Message 和 Runnable 對(duì)象。 (2)在其他線程(不是 Handler 綁定線程)中排入一些要執(zhí)行的動(dòng)作。 Scheduling Message,即(1) ,可以通過(guò)以下方法完成: post(Runnable):Runnable 在 handler 綁定的線程上執(zhí)行,也就是說(shuō)不創(chuàng)建新線程。 postAtTime(Runnable,long): postDelayed(Runnable,long): sendEmptyMessage(int): sendMessage(Message): sendMessageAtTime(Message,long): sendMessageDelayed(Message,long): post 這個(gè)動(dòng)作讓你把 Runnable 對(duì)象排入 MessageQueue,MessageQueue 受到這些消息的時(shí)候 執(zhí)行他們,當(dāng)然以一定的排序。sendMessage 這個(gè)動(dòng)作允許你把 Message 對(duì)象排成隊(duì)列,這 些 Message 對(duì)象包含一些信息, Handler 的 hanlerMessage(Message)會(huì)處理這些 Message.當(dāng)然, handlerMessage(Message)必須由 Handler 的子類來(lái)重寫(xiě)。這是編程人員需要作的事。 當(dāng) posting 或者 sending 到一個(gè) Hanler 時(shí),你可以有三種行為:當(dāng) MessageQueue 準(zhǔn)備好就處 理,定義一個(gè)延遲時(shí)間,定義一個(gè)精確的時(shí)間去處理。后兩者允許你實(shí)現(xiàn) timeout,tick,和基 于時(shí)間的行為。 當(dāng)你的應(yīng)用創(chuàng)建一個(gè)新的進(jìn)程時(shí),主線程(也就是 UI 線程)自帶一個(gè) MessageQueue,這個(gè) MessageQueue 管理頂層的應(yīng)用對(duì)象(像 activities,broadcast receivers 等)和主線程創(chuàng)建的窗 體。你可以創(chuàng)建自己的線程,并通過(guò)一個(gè) Handler 和主線程進(jìn)行通信。這和之前一樣,通過(guò) post 和 sendmessage 來(lái)完成,差別在于在哪一個(gè)線程中執(zhí)行這么方法。在恰當(dāng)?shù)臅r(shí)候,給定 的 Runnable 和 Message 將在 Handler 的 MessageQueue 中被 Scheduled。 Message 簡(jiǎn)介: Message 類就是定義了一個(gè)信息,這個(gè)信息中包含一個(gè)描述符和任意的數(shù)據(jù)對(duì)象,這個(gè)信息 被用來(lái)傳遞給 Handler.Message 對(duì)象提供額外的兩個(gè) int 域和一個(gè) Object 域,這可以讓你在 大多數(shù)情況下不用作分配的動(dòng)作。 盡管 Message 的構(gòu)造函數(shù)是 public 的,但是獲取 Message 實(shí)例的最好方法是調(diào)用 Message.obtain(),或者 Handler.obtainMessage()方法,這些方法會(huì)從回收對(duì)象池中獲取一個(gè)。 MessageQueue 簡(jiǎn)介: 這是一個(gè)包含 message 列表的底層類。Looper 負(fù)責(zé)分發(fā)這些 message。Messages 并不是直接 加到一個(gè) MessageQueue 中,而是通過(guò) MessageQueue.IdleHandler 關(guān)聯(lián)到 Looper。 你可以通過(guò) Looper.myQueue()從當(dāng)前線程中獲取 MessageQueue。 Looper 簡(jiǎn)介: Looper 類被用來(lái)執(zhí)行一個(gè)線程中的 message 循環(huán)。 默認(rèn)情況, 沒(méi)有一個(gè)消息循環(huán)關(guān)聯(lián)到線程。 在線程中調(diào)用 prepare()創(chuàng)建一個(gè) Looper,然后用 loop()來(lái)處理 messages,直到循環(huán)終止。 大多數(shù)和 message loop 的交互是通過(guò) Handler。 下面是一個(gè)典型的帶有 Looper 的線程實(shí)現(xiàn)。 class LooperThread extends Thread { public Handler mHandler; public void run() { Looper.prepare(); mHandler = new Handler() { public void handleMessage(Message msg) { // process incoming messages here } }; Looper.loop(); } }
?
48. AIDL 的全稱是什么?如何工作?能處理哪些類型的數(shù)據(jù)? AIDL 的英文全稱是 Android Interface Define Language 當(dāng) A 進(jìn)程要去調(diào)用 B 進(jìn)程中的 service 時(shí),并實(shí)現(xiàn)通信,我們通常都是通過(guò) AIDL 來(lái)操作的 A 工程: 首先我們?cè)?net.blogjava.mobile.aidlservice 包中創(chuàng)建一個(gè) RemoteService.aidl 文件,在里面我 們自定義一個(gè)接口, 含有方法 get。 ADT 插件會(huì)在 gen 目錄下自動(dòng)生成一個(gè) RemoteService.java 文件,該類中含有一個(gè)名為 RemoteService.stub 的內(nèi)部類,該內(nèi)部類中含有 aidl 文件接口的 get 方法。 說(shuō)明一:aidl 文件的位置不固定,可以任意 然后定義自己的 MyService 類,在 MyService 類中自定義一個(gè)內(nèi)部類去繼承 RemoteService.stub 這個(gè)內(nèi)部類,實(shí)現(xiàn) get 方法。在 onBind 方法中返回這個(gè)內(nèi)部類的對(duì)象, 系統(tǒng)會(huì)自動(dòng)將這個(gè)對(duì)象封裝成 IBinder 對(duì)象,傳遞給他的調(diào)用者。 其次需要在 AndroidManifest.xml 文件中配置 MyService 類,代碼如下: <!-- 注冊(cè)服務(wù) --> <service android:name=".MyService"> <intent-filter> <!-- 指定調(diào)用 AIDL 服務(wù)的 ID --> <action android:name="net.blogjava.mobile.aidlservice.RemoteService" /> </intent-filter> </service> 為什么要指定調(diào)用 AIDL 服務(wù)的 ID,就是要告訴外界 MyService 這個(gè)類能夠被別的進(jìn)程訪問(wèn), 只要?jiǎng)e的進(jìn)程知道這個(gè) ID,正是有了這個(gè) ID,B 工程才能找到 A 工程實(shí)現(xiàn)通信。 說(shuō)明:AIDL 并不需要權(quán)限 B 工程: 首先我們要將 A 工程中生成的 RemoteService.java 文件拷貝到 B 工程中,在 bindService 方法中綁定 aidl 服務(wù) 綁定 AIDL 服務(wù)就是將 RemoteService 的 ID 作為 intent 的 action 參數(shù)。 說(shuō)明:如果我們單獨(dú)將 RemoteService.aidl 文件放在一個(gè)包里,那個(gè)在我們將 gen 目 錄下的該包拷貝到 B 工程中。如果我們將 RemoteService.aidl 文件和我們的其他類存放在一 起,那么我們?cè)?B 工程中就要建立相應(yīng)的包,以保證 RmoteService.java 文件的報(bào)名正確, 我們不能修改 RemoteService.java 文件 bindService(new Inten("net.blogjava.mobile.aidlservice.RemoteService"), serviceConnection, Context.BIND_AUTO_CREATE); ServiceConnection 的 onServiceConnected(ComponentName name, IBinder service)方法 中的 service 參數(shù)就是 A 工程中 MyService 類中繼承了 RemoteService.stub 類的內(nèi)部類的對(duì)象。
?
49. 請(qǐng)解釋下 Android 程序運(yùn)行時(shí)權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。 運(yùn)行時(shí)權(quán)限 Dalvik( android 授權(quán)) 文件系統(tǒng) linux 內(nèi)核授權(quán)
?
50. 系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問(wèn)指定頁(yè)面?請(qǐng)說(shuō)明原由。 通過(guò)直接發(fā)送 Uri 把參數(shù)帶過(guò)去,或者通過(guò) manifest 里的 intentfilter 里的 data 屬性 51. 你如何評(píng)價(jià) Android 系統(tǒng)?優(yōu)缺點(diǎn)。
?答:Android 平臺(tái)手機(jī) 5 大優(yōu)勢(shì):
?一、開(kāi)放性 在優(yōu)勢(shì)方面,Android 平臺(tái)首先就是其開(kāi)發(fā)性,開(kāi)發(fā)的平臺(tái)允許任何移動(dòng)終端廠商加入到 Android 聯(lián)盟中來(lái)。 顯著的開(kāi)放性可以使其擁有更多的開(kāi)發(fā)者, 隨著用戶和應(yīng)用的日益豐富, 一個(gè)嶄新的平臺(tái)也將很快走向成熟。開(kāi)放性對(duì)于 Android 的發(fā)展而言,有利于積累人氣,這 里的人氣包括消費(fèi)者和廠商,而對(duì)于消費(fèi)者來(lái)講,隨大的受益正是豐富的軟件資源。開(kāi)放的 平臺(tái)也會(huì)帶來(lái)更大競(jìng)爭(zhēng),如此一來(lái),消費(fèi)者將可以用更低的價(jià)位購(gòu)得心儀的手機(jī)。
?二、掙脫運(yùn)營(yíng)商的束縛 在過(guò)去很長(zhǎng)的一段時(shí)間,特別是在歐美地區(qū),手機(jī)應(yīng)用往往受到運(yùn)營(yíng)商制約,使用什么功能 接入什么網(wǎng)絡(luò),幾乎都受到運(yùn)營(yíng)商的控制。從去年 iPhone 上市 ,用戶可以更加方便地連接 網(wǎng)絡(luò), 運(yùn)營(yíng)商的制約減少。 隨著 EDGE、 HSDPA 這些 2G 至 3G 移動(dòng)網(wǎng)絡(luò)的逐步過(guò)渡和提升, 手機(jī)隨意接入網(wǎng)絡(luò)已不是運(yùn)營(yíng)商口中的笑談,當(dāng)你可以通過(guò)手機(jī) IM 軟件方便地進(jìn)行即時(shí)聊 天時(shí),再回想不久前天價(jià)的彩信和圖鈴下載業(yè)務(wù),是不是像噩夢(mèng)一樣?互聯(lián)網(wǎng)巨頭 Google 推動(dòng)的 Android 終端天生就有網(wǎng)絡(luò)特色,將讓用戶離互聯(lián)網(wǎng)更近。
?三、豐富的硬件選擇 這一點(diǎn)還是與 Android 平臺(tái)的開(kāi)放性相關(guān),由于 Android 的開(kāi)放性,眾多的廠商會(huì)推出千奇 百怪,功能特色各具的多種產(chǎn)品。功能上的差異和特色,卻不會(huì)影響到數(shù)據(jù)同步、甚至軟件 的兼容,好比你從諾基亞 Symbian 風(fēng)格手機(jī) 一下改用蘋(píng)果 iPhone ,同時(shí)還可將 Symbian 中優(yōu)秀的軟件帶到 iPhone 上使用、 聯(lián)系人等資料更是可以方便地轉(zhuǎn)移, 是不是非常方便呢?
?四、不受任何限制的開(kāi)發(fā)商 Android 平臺(tái)提供給第三方開(kāi)發(fā)商一個(gè)十分寬泛、自由的環(huán)境,不會(huì)受到各種條條框框的阻 擾,可想而知,會(huì)有多少新穎別致的軟件會(huì)誕生。但也有其兩面性,血腥、暴力、情色方面 的程序和游戲如可控制正是留給 Android 難題之一。
?
?五、無(wú)縫結(jié)合的 Google 應(yīng)用 如今叱詫互聯(lián)網(wǎng)的 Google 已經(jīng)走過(guò) 10 年度歷史,從搜索巨人到全面的互聯(lián)網(wǎng)滲透,Google 服務(wù)如地圖、郵件、搜索等已經(jīng)成為連接用戶和互聯(lián)網(wǎng)的重要紐帶,而 Android 平臺(tái)手機(jī)將 無(wú)縫結(jié)合這些優(yōu)秀的 Google 服務(wù)。
?再說(shuō) Android 的 5 大不足:
?一、安全和隱私 由于手機(jī) 與互聯(lián)網(wǎng)的緊密聯(lián)系,個(gè)人隱私很難得到保守。除了上網(wǎng)過(guò)程中經(jīng)意或不經(jīng)意留 下的個(gè)人足跡,Google 這個(gè)巨人也時(shí)時(shí)站在你的身后,洞穿一切,因此,互聯(lián)網(wǎng)的深入將 會(huì)帶來(lái)新一輪的隱私危機(jī)。
?二、首先開(kāi)賣 Android 手機(jī)的不是最大運(yùn)營(yíng)商 眾所周知,T-Mobile 在 23 日,于美國(guó)紐約發(fā)布 了 Android 首款手機(jī) G1。但是在北美市場(chǎng), 最大的兩家運(yùn)營(yíng)商乃 AT&T 和 Verizon, 而目前所知取得 Android 手機(jī)銷售權(quán)的僅有 T-Mobile 和 Sprint,其中 T-Mobile 的 3G 網(wǎng)絡(luò)相對(duì)于其他三家也要遜色不少,因此,用戶可以買賬購(gòu) 買 G1,能否體驗(yàn)到最佳的 3G 網(wǎng)絡(luò)服務(wù)則要另當(dāng)別論了!
?三、運(yùn)營(yíng)商仍然能夠影響到 Android 手機(jī) 在國(guó)內(nèi)市場(chǎng),不少用戶對(duì)購(gòu)得移動(dòng)定制機(jī)不滿,感覺(jué)所購(gòu)的手機(jī)被人涂畫(huà)了廣告一般。這樣 的情況在國(guó)外市場(chǎng)同樣出現(xiàn)。Android 手機(jī)的另一發(fā)售運(yùn)營(yíng)商 Sprint 就將在其機(jī)型中內(nèi)置其 手機(jī)商店程序。
?四、同類機(jī)型用戶減少 在不少手機(jī)論壇都會(huì)有針對(duì)某一型號(hào)的子論壇, 對(duì)一款手機(jī)的使用心得交流, 并分享軟件資 源。而對(duì)于 Android 平臺(tái)手機(jī),由于廠商豐富,產(chǎn)品類型多樣,這樣使用同一款機(jī)型的用戶 越來(lái)越少,缺少統(tǒng)一機(jī)型的程序強(qiáng)化。舉個(gè)稍顯不當(dāng)?shù)睦?#xff0c;現(xiàn)在山寨機(jī)泛濫,品種各異, 就很少有專門(mén)針對(duì)某個(gè)型號(hào)山寨機(jī)的討論和群組, 除了哪些功能異常搶眼、 頗受追捧的機(jī)型 以外。
五、過(guò)分依賴開(kāi)發(fā)商缺少標(biāo)準(zhǔn)配置 在使用 PC 端的 Windows Xp 系統(tǒng)的時(shí)候,都會(huì)內(nèi)置微軟 Windows Media Player 這樣一個(gè)瀏 覽器程序,用戶可以選擇更多樣的播放器,如 Realplay 或暴風(fēng)影音等。但入手開(kāi)始使用默 認(rèn)的程序同樣可以應(yīng)付多樣的需要。在 Android 平臺(tái)中,由于其開(kāi)放性,軟件更多依賴第 三方廠商,比如 Android 系統(tǒng)的 SDK 中就沒(méi)有內(nèi)置音樂(lè) 播放器,全部依賴第三方開(kāi)發(fā),缺 少了產(chǎn)品的統(tǒng)一性。
?
52. 什么是 ANR 如何避免它?
答:ANR:Application Not Responding,五秒 在 Android 中,活動(dòng)管理器和窗口管理器這兩個(gè)系統(tǒng)服務(wù)負(fù)責(zé)監(jiān)視應(yīng)用程序的響應(yīng)。當(dāng)出現(xiàn) 下列情況時(shí),Android 就會(huì)顯示 ANR 對(duì)話框了: 對(duì)輸入事件(如按鍵、觸摸屏事件)的響應(yīng)超過(guò) 5 秒 意向接受器(intentReceiver)超過(guò) 10 秒鐘仍未執(zhí)行完畢 Android 應(yīng)用程序完全運(yùn)行在一個(gè)獨(dú)立的線程中(例如 main)。這就意味著,任何在主線 程中運(yùn)行的,需要消耗大量時(shí)間的操作都會(huì)引發(fā) ANR。因?yàn)榇藭r(shí),你的應(yīng)用程序已經(jīng)沒(méi)有 機(jī)會(huì)去響應(yīng)輸入事件和意向廣播(Intent broadcast)。
?因此,任何運(yùn)行在主線程中的方法,都要盡可能的只做少量的工作。特別是活動(dòng)生命周 期中的重要方法如 onCreate()和 onResume()等更應(yīng)如此。潛在的比較耗時(shí)的操作,
如訪問(wèn) 網(wǎng)絡(luò)和數(shù)據(jù)庫(kù);或者是開(kāi)銷很大的計(jì)算,比如改變位圖的大小,需要在一個(gè)單獨(dú)的子線程中 完成(或者是使用異步請(qǐng)求,如數(shù)據(jù)庫(kù)操作)。但這并不意味著你的主線程需要進(jìn)入阻塞狀態(tài) 已等待子線程結(jié)束 -- 也不需要調(diào)用 Therad.wait()或者 Thread.sleep()方法。 取而代之的是, 主線程為子線程提供一個(gè)句柄(Handler), 讓子線程在即將結(jié)束的時(shí)候調(diào)用它(xing:可以參看 Snake 的例子,這種方法與以前我們所接觸的有所不同)。使用這種方法涉及你的應(yīng)用程序, 能夠保證你的程序?qū)斎氡3至己玫捻憫?yīng), 從而避免因?yàn)檩斎胧录^(guò) 5 秒鐘不被處理而產(chǎn) 生的 ANR。這種實(shí)踐需要應(yīng)用到所有顯示用戶界面的線程,因?yàn)樗麄兌济媾R著同樣的超時(shí) 問(wèn)題。
?
53. 什么情況會(huì)導(dǎo)致 Force Close ?如何避免?能否捕獲導(dǎo)致其的異常?
?答:一般像空指針啊,可以看起 logcat,然后對(duì)應(yīng)到程序中 來(lái)解決錯(cuò)誤
?
?55. 簡(jiǎn)要解釋一下 activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver
?答:一個(gè) activity 呈現(xiàn)了一個(gè)用戶可以操作的可視化用戶界面 一個(gè) service 不包含可見(jiàn)的用戶界面,而是在后臺(tái)無(wú)限地運(yùn)行 可以連接到一個(gè)正在運(yùn)行的服務(wù)中, 連接后, 可以通過(guò)服務(wù)中暴露出來(lái)的借口與其進(jìn)行 通信 一個(gè) broadcast receiver 是一個(gè)接收廣播消息并作出回應(yīng)的 component,broadcast receiver 沒(méi)有界面 intent:content provider 在接收到 ContentResolver 的請(qǐng)求時(shí)被激活。 activity, service 和 broadcast receiver 是被稱為 intents 的異步消息激活的。 一個(gè) intent 是一個(gè) Intent 對(duì)象,它保存了消息的內(nèi)容。對(duì)于 activity 和 service 來(lái)說(shuō),它指 定了請(qǐng)求的操作名稱和待操作數(shù)據(jù)的 URI Intent 對(duì)象可以顯式的指定一個(gè)目標(biāo) component。如果這樣的話,android 會(huì)找到這個(gè) component(基于 manifest 文件中的聲明)并激活它。但如果一個(gè)目標(biāo)不是顯式指定的, android 必須找到響應(yīng) intent 的最佳 component。 它是通過(guò)將 Intent 對(duì)象和目標(biāo)的 intent filter 相比較來(lái)完成這一工作的。一個(gè) component 的 intent filter 告訴 android 該 component 能處理的 intent。intent filter 也是在 manifest 文件中聲明的。
?
56. IntentService 有何優(yōu)點(diǎn)?
答:IntentService 的好處 * Acitivity 的進(jìn)程,當(dāng)處理 Intent 的時(shí)候,會(huì)產(chǎn)生一個(gè)對(duì)應(yīng)的 Service * Android 的進(jìn)程處理器現(xiàn)在會(huì)盡可能的不 kill 掉你 * 非常容易使用
?
57. 橫豎屏切換時(shí)候 activity 的生命周期?
?1、不設(shè)置 Activity 的 android:configChanges 時(shí),切屏?xí)匦抡{(diào)用各個(gè)生命周期,切橫 屏?xí)r會(huì)執(zhí)行一次,切豎屏?xí)r會(huì)執(zhí)行兩次 2、設(shè)置 Activity 的 android:configChanges="orientation"時(shí),切屏還是會(huì)重新調(diào)用各個(gè) 生命周期,切橫、豎屏?xí)r只會(huì)執(zhí)行一次 3、設(shè)置 Activity 的 android:configChanges="orientation|keyboardHidden"時(shí),切屏不 會(huì)重新調(diào)用各個(gè)生命周期,只會(huì)執(zhí)行 onConfigurationChanged 方法 如何將 SQLite 數(shù)據(jù)庫(kù)(dictionary.db 文件)與 apk 文件一起發(fā)布? 解答:可以將 dictionary.db 文件復(fù)制到 Eclipse Android 工程中的 res aw 目錄中。所有 在 res aw 目錄中的文件不會(huì)被壓縮,這樣可以直接提取該目錄中的文件。可以將 dictionary.db 文件復(fù)制到 res aw 目錄中
?
58. 如何將打開(kāi) res aw 目錄中的數(shù)據(jù)庫(kù)文件?
?解答:在 Android 中不能直接打開(kāi) res aw 目錄中的數(shù)據(jù)庫(kù)文件,而需要在程序第一次 啟動(dòng)時(shí)將該文件復(fù)制到手機(jī)內(nèi)存或 SD 卡的某個(gè)目錄中,然后再打開(kāi)該數(shù)據(jù)庫(kù)文件。復(fù)制的 基本方法是使用 getResources().openRawResource 方法獲得 res aw 目錄中資源的 InputStream 對(duì)象,然后將該 InputStream 對(duì)象中的數(shù)據(jù)寫(xiě)入其他的目錄中相應(yīng)文件中。在 Android SDK 中可以使用 SQLiteDatabase.openOrCreateDatabase 方法來(lái)打開(kāi)任意目錄中的 SQLite 數(shù)據(jù)庫(kù)文件。
轉(zhuǎn)載于:https://www.cnblogs.com/liuzenglong/archive/2011/10/22/2221054.html
總結(jié)
以上是生活随笔為你收集整理的Android面试题(五) --重要的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: android audit2allow工
- 下一篇: Android Service与Runn