標籤:hand 概念 ann name 狀態列 hang rom lib
轉載請註明出處:http://blog.csdn.net/iwanghang/
我正在參加CSDN 2016部落格之星評選,希望得到您的寶貴一票~
http://blog.csdn.net/vote/candidate.html?username=iwanghang
請為我投票,謝謝 ~~
如果沒有CSDN帳號 直接使用/QQ/微博登陸 就能投票了~~
31. 請描述一下BroadcastReceiver。
BroadcastReceiver用於接收並處理廣播通知(broadcast announcements)。多數的廣播是系統發起的,如地區變換、電量不足、來電簡訊等。程式也可以播放一個廣播。程式可以有任意數量的broadcast receivers來響應它覺得重要的通知。Broadcast receiver可以通過多種方式通知使用者: 啟動activity、使用NotificationManager、開啟背景燈、震動裝置、播放聲音等,最典型的是在狀態列顯示一個表徵圖,這樣使用者就可以點它開啟看通知內容。通常我們的某個應用或系統本身在某些事件(電池電量不足、來電簡訊)來臨時會廣播一個Intent出去,我們利用註冊一個broadcastreceiver來監聽這些Intent並擷取Intent中的資料。
32. 在manifest和代碼中如何註冊和使用BroadcastReceiver。
在android的manifest中註冊
<receiver android:="" name="“Receiver1”">
<intent-filter>
<!----和Intent中的action對應--->
<actionandroid: name="“com.forrest.action.mybroadcast”/">
</actionandroid:></intent-filter>
</receiver>
1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和廣播中Intent的action對應;
2、 MyBroadcastReceiver br= new MyBroadcastReceiver();
3、 registerReceiver(br, filter);
33.請介紹下ContentProvider是如何?資料共用的。
一個程式可以通過實現一個Content provider的抽象介面將自己的資料完全暴露出去,而且Content provider是以類似資料庫中的表的方式將自己的資料暴露。Content provider儲存和檢索資料,通過它可以讓所有的應用程式訪問到,這也是應用程式之間唯一共用資料的方法。
要想使應用程式的資料公開化,可通過2種方法:建立一個資料自己的Content Provider或者將你的資料添加到一個已經存在的Content Provider中,前提是有相同資料類型並且有寫入Content Provider的許可權,Android提供了Content Resolverr,外界的程式可以通過Content Resolver介面訪問Content Provider提供的資料。
34.請介紹下Android的資料存放區方式。
Android提供了5中儲存資料的方式,分別是以下幾種:
1、使用Shared Preferences儲存資料,用來儲存key-value,pairs格式的資料,它是一個輕量級的KVStore for Redis機制,只可以儲存基礎資料型別 (Elementary Data Type)。
2、使用檔案儲存體資料,通過FileInputStream和FileOutputStream對檔案進行操作。在Android中,檔案是一個應用程式私人的,一個應用程式無法讀寫其他應用程式的檔案。
3、使用SQLite資料庫儲存資料,Android提供的一個標準資料庫,支援SQL語句。
4、使用Content Provider儲存資料,是所有應用程式之間資料存放區和檢索的一個橋樑,它的作用就是使得各個應用程式之間實現資料共用。它是一個特殊的儲存資料的類型,它提供了一套標準的介面用來擷取資料,操作資料。系統也提供了音頻、視頻、映像和個人資訊等幾個常用的Content Provider。如果你想公開自己的私人資料,可以建立自己的Content Provider類,或者當你對這些資料擁有控制寫入的許可權時,將這些資料添加到Content Provider中實現共用。外部存取通過Content Resolver去訪問並操作這些被暴露的資料。
5、使用網路儲存資料
35.請介紹下Android中常用的五種布局。
最常用的布局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml設定檔或者代碼中進行布局。
1、Frame Layout是最簡單的布局方式,放置的控制項都只能羅列到左上方,控制項會有重疊,不能進行複雜的布局。
2、Linear Layout可以通過orientation屬性設定線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進行複雜的布局。
3、Absolute Layout可以讓子項目指定準確的x、y座標值,並顯示在螢幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對座標,所以在實際中不提倡使用。
4、Relative Layout允許子項目制定他們相對於其他元素或父元素的位置(通過ID制定)。因此,你可以以靠右對齊,或上下,或置於螢幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在螢幕的中央,那麼相對於這個元素的其他元素將以螢幕中央的相對位置來排列。這個是相對於Absolute Layout的,採用相對座標,所以在實際中比較常用。
5、Table Layout將以子項目的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實際中也經常使用。
36.談談UI中, Padding和Margin有什麼區別?
Padding是控制項的內容相對控制項的邊緣的邊距,而Margin是控制項邊緣相對於其他控制項的邊距。
37.android本身的一些限制,比如apk包大小限制,讀取大檔案時的時間限。
apk包大小限制不好說,有的apk為100M,還是能裝到手機上。一般的apk大小為5~10M左右。讀取大檔案的時間應該是在main線程裡面,時間限制為5秒左右。
38.ListView如何提高其效率?
1、使用分頁載入,不要一次性載入所有資料。
2、複用convertView。在getItemView中,判斷converView是否為空白,如果不為空白,可複用。
3、非同步載入圖片。Item中如果包含有webimage,那麼最好非同步載入。
4、快速滑動時,不顯示圖片。當快速滑動列表(SCROLL_STATE_FLING),item中的圖片或擷取需要消耗資源的view,可以不顯示出來;而處於其他兩種狀態(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來。
39.Android程式與Java程式的區別?
1、執行進入點,Android基於Mainfest.xml設定檔中的intent-filter,Java基於Main
2、UI,Android基於Activity,Java基於Frame
3、Android基於設定檔,Java不是。
4、Android基於組件Activity,Service,Broadcast Receiver,Content Provider,Java不是。
40.談談對Android NDK的理解。
android NDK是一套工具,允許Android應用開發人員嵌入從C、C++原始碼編譯來的本地機器代碼到各自的應用軟體包中。
1、 NDK是一系列工具的集合。
NDK提供了一系列的工具,協助開發人員快速開發C(或C++)的動態庫,並能自動將so和java應用一起打包成apk。這些工具對開發人員協助時巨大的。
NDK整合了交叉編輯器,並提供了相應的mk檔案隔離CPU、平台、API等差異,開發人員只需要簡單修改mk檔案(指出“那些檔案需要編譯”、“編譯特性要求”等),就可以建立出so。NDK可以自動將so和Java應用一起打包,極大的減輕了開發人員的打包工作。
2、NDK提供了一份穩定、功能有限的API標頭檔聲明。這些API支援的功能非常有限,包含有:C標準庫(libc)、標準數學庫(libm)、壓縮庫(libz)、log庫(liblog)。
41.談談Android的優點和不足之處。
優點:
1、android是開源、市場佔有率大。
2、android能夠有豐富的硬體選擇。
3、android是一款基於Linux平台的開源作業系統,從而避免了專利壁壘,是一款完全免費的只能手機平台。
4、由於android是google開發的,因此能夠無縫結合Google應用。
缺點:
1、安全與隱私。手機與互連網緊密聯絡,個人隱私很難得到保守。
42.Android系統中GC什麼情況下會出現記憶體泄露呢?
導致記憶體泄露主要的原因是,先前申請了記憶體空間而忘記了釋放。如果程式中存在無用對象的引用,那麼這些對象就會駐留記憶體,消耗記憶體,因為無法讓記憶體回收行程GC驗證這些對象是否不再需要。如果存在對象的引用,這個對象就被定義為“有效活動”,同時不會被釋放。要確定對象所佔記憶體將被回收,我們就要確認該對象不會再被使用。典型的做法是把對象資料成員設為null或者從集合中移除該對象。當出現以下情況時,會造成記憶體泄露:
1、 資料庫的cursor沒有關閉。
2、 構造adapter時,沒有使用緩衝contentview。
3、 Bitmap對象不使用時,採用recycle()釋放記憶體。
4、 Activity中的對象的生命週期大於activity。
調試方法: DDMS==>HEAPSIZE==>dataobject==>[TotalSize]
43.Android UI中的View如何重新整理。
Android中對View的更新方式有很多種,使用時要區分不同的應用場合。要分清的是:多線程和雙緩衝。
1、不使用多線程和雙緩衝
這種情況最簡單,一般只希望View在發生改變時對UI進行重繪。你只需要Activity中顯式調用View對象中的invalidate()方法即可。系統會自動調用View的onDraw()方法。
2、使用多線程和不使用雙緩衝
這種情況下需要開啟新的線程,新開的線程就不好訪問View對象了。強行訪問的話會報錯:android.view.ViewRoot$ CalledFromWrongThreadException: only theoriginal thread that created a view hierarchy can touch its views。
這時候你需要建立一個繼承了android.os.handler的子類,並重寫handleMessage方法。Android.os.Handle是能發送和處理訊息的,你需要在Activity中發出更新UI的訊息,然後再你的Handler(可以使用匿名內部類)中處理訊息(因為匿名內部類可以訪問父類變數,你可以直接調用View對象中的invalidate()方法。也就是說:在新線程中建立並發送一個Message,然後在主線程中捕獲、處理該訊息。
3、使用多線程和雙緩衝
Android的SurfaceView是View的子類,她同時也實現了雙緩衝。你可以定義一個她的子類並實現Surfaceholder.Callback介面。由於SurfaceHolder.Callback介面,新線程就不要android.os.Handler幫忙了。SurfaceHolder中lockCanvas()方法可以鎖定畫布,繪製完新的映像後調用unlockCanvasand Post解鎖。
44.對android虛擬機器的理解,包括記憶體管理機制記憶體回收機制。
(未找到合適答案)
45.Framework工作方式及原理,Activity是如何產生一個view的,機制是什麼。
(未找到合適答案)
轉載請註明出處:http://blog.csdn.net/iwanghang/
歡迎移動開發愛好者交流
瀋陽或周邊城市公司有意開發Android,請與我聯絡
連絡方式
:iwanghang
QQ:413711276
郵箱:[email protected]
Android開發-基本概念小整理(二)為了面試的小夥伴們所準備~~