筆/面試題雜記

  • Android系統(tǒng)對(duì)下列哪些對(duì)象提供了資源池
    答案:Messagehe,AsyncTask。
  • getMetrics用于獲取屏幕的高和寬。
  • DVM指dalvik的虛擬機(jī).每一個(gè)Android應(yīng)用程序都在它自己的進(jìn)程中運(yùn)行,都擁有一個(gè)獨(dú)立的 Dalvik虛擬機(jī)實(shí)例.而每一個(gè)DVM都是在Linux 中的一個(gè)進(jìn)程,所以說可以認(rèn)為是同一個(gè)概念.
  • Activity和Task的啟動(dòng)模式有哪些?

答:standard、singleTop、singleTask,singleInstance
解析:

  • “拿來主義”standard模式。哪里需要調(diào)用我我就去哪里,可以多次實(shí)例化,可以幾個(gè)相同的Activity重疊。
  • “拒絕堆疊”singleTop模式。可以多次實(shí)例化,但是不可以多個(gè)相同的Activity重疊,當(dāng)堆棧的頂部為相同的Activity時(shí),會(huì)調(diào)用onNewIntent函數(shù)。
  • “獨(dú)立門戶”singleTask模式。同一個(gè)應(yīng)用中調(diào)用該Activity時(shí),如果該Activity沒有被實(shí)例化,會(huì)在本應(yīng)用程序的Task內(nèi)實(shí)例 化,如果已經(jīng)實(shí)例化,會(huì)將Task中其上的Activity銷毀后,調(diào)用onNewIntent;其它應(yīng)用程序調(diào)用該Activity時(shí),如果該 Activity沒有被實(shí)例化,會(huì)創(chuàng)建新的Task并實(shí)例化后入棧,如果已經(jīng)實(shí)例化,會(huì)銷毀其上的Activity,并調(diào)用onNewIntent。一句 話,singleTask就是“獨(dú)立門戶”,在自己的Task里,并且啟動(dòng)時(shí)不允許其他Activity凌駕于自己之上。
  • “孤獨(dú)寂寞”singleInstance模式。加載該Activity時(shí)如果沒有實(shí)例化,他會(huì)創(chuàng)建新的Task后,實(shí)例化入棧,如果已經(jīng)存在,直接調(diào)用 onNewIntent,該Activity的Task中不允許啟動(dòng)其它的Activity,任何從該Activity啟動(dòng)的其他Activity都將被 放到其他task中,先檢查是否有本應(yīng)用的task,沒有的話就創(chuàng)建。
  • 對(duì)于一個(gè)已經(jīng)存在的SharedPreferences對(duì)象setting,想向其中存入一個(gè)字符串"person",setting應(yīng)該先調(diào)用什么方法( ).

答:edit()
解析:

//實(shí)例化SharedPreferences對(duì)象(第一步)
SharedPreferences mySharedPreferences= getSharedPreferences("test", Activity.MODE_PRIVATE); 

//實(shí)例化SharedPreferences.Editor對(duì)象(第二步)(android.content.SharedPreferences.Editor)
SharedPreferences.Editor editor = mySharedPreferences.edit(); 

//用putString的方法保存數(shù)據(jù) 
editor.putString("name", "Karl"); 
editor.putString("habit", "sleep"); 

//提交當(dāng)前數(shù)據(jù)
editor.commit();
  • 編寫AIDL文件時(shí),需要注意以下幾點(diǎn):

1.接口名和aidl文件名相同
2.接口和方法前不用加訪問權(quán)限修飾符public,private,protected等,也不能用final,static。
3.Aidl默認(rèn)支持的類型包話java基本類型(int、long、boolean等)和(String、List、Map、 CharSequence),使用這些類型時(shí)不需要import聲明。對(duì)于List和Map中的元素類型必須是Aidl支持的類型。如果使用自定義類型作 為參數(shù)或返回值,自定義類型必須實(shí)現(xiàn)Parcelable接口。
4.自定義類型和AIDL生成的其它接口類型在aidl描述文件中,應(yīng)該顯式import,即便在該類和定義的包在同一個(gè)包中。
5.在aidl文件中所有非Java基本類型參數(shù)必須加上in、out、inout標(biāo)記,以指明參數(shù)是輸入?yún)?shù)、輸出參數(shù)還是輸入輸出參數(shù)。
6.Java原始類型默認(rèn)的標(biāo)記為in,不能為其它標(biāo)記。
持續(xù)更新...

  • ANR(Application Not Responding)

在Android中,如果你的應(yīng)用程序有一段時(shí)間響應(yīng)不夠靈敏,系統(tǒng)會(huì)向用戶顯示一個(gè)對(duì)話框,這個(gè)對(duì)話框稱作應(yīng)用程序無響應(yīng)(ANR:Application Not Responding)對(duì)話框。用戶可以選擇“等待”而讓程序繼續(xù)運(yùn)行,也可以選擇“強(qiáng)制關(guān)閉”。
默認(rèn)情況下,Activity的最長(zhǎng)執(zhí)行時(shí)間是5秒,BroadcastReceiver的最長(zhǎng)執(zhí)行時(shí)間是10秒。超出就會(huì)提示應(yīng)用無響應(yīng)。
三種常見類型:

  • KeyDispath Timeout(5 seconds) -- 主要類型
    按鍵或觸摸事件在特定時(shí)間內(nèi)無響應(yīng)。
  • BroadcastTimeout(10 seconds)
    BroadcastReceiver在特定時(shí)間內(nèi)無法處理完成。
  • Service Timeout(20 seconds) --小概率類型
    Service在特定的時(shí)間內(nèi)無法處理完成。
  • 從架構(gòu)圖看,Android分為5個(gè)層

Linux Kernel(Linux內(nèi)核)、Hardware Abstraction Layer(硬件抽象層)、Libraries(系統(tǒng)運(yùn)行庫(kù)或者是c/c++ 核心庫(kù))、Application Framework(開發(fā)框架包 )、Applications(核心應(yīng)用程序)


image
  • Android系統(tǒng)對(duì)下列哪些對(duì)象提供了資源池

答案:Message和AsyncTask。
Message有靜態(tài)方法Obtaion從消息池中取對(duì)象。AsynTask是線程池改造的,池里默認(rèn)提供(核數(shù) + 1)個(gè)線程進(jìn)行并發(fā)操作,最大支持(核數(shù) * 2 + 1)個(gè)線程,超過后會(huì)丟棄塔塔任務(wù);

  • 請(qǐng)介紹一下,socket編程的三種通信模型,BIO,NIO,AIO
  • BIO是同步阻塞IO,是一個(gè)客戶端對(duì)應(yīng)一個(gè)線程
  • NIO是同步非阻塞IO,多個(gè)客戶端對(duì)應(yīng)一個(gè)線程,服務(wù)端和客戶端均使用緩沖區(qū)的方式進(jìn)行讀寫。
  • AIO是異步非阻塞IO,AIO的簡(jiǎn)化是NIO
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容