2016-03-17 15:11:50 1672瀏覽
之前我們已經(jīng)用了一篇文章為讀者介紹了企業(yè)對于android開發(fā)人才的面試題部分內(nèi)容,接下來我們繼續(xù)接著《扣丁學(xué)堂培訓(xùn)講師整理android面試題(一)》內(nèi)容進(jìn)行進(jìn)一步的拓展和分析。
扣丁學(xué)堂培訓(xùn)講師整理android面試題:
一、Intent傳遞數(shù)據(jù)時,可以傳遞哪些類型數(shù)據(jù)?
intent間傳送數(shù)據(jù)一般有兩種常用的方法: 1、extra 2、data。
extra可以用Intent.putExtra放入數(shù)據(jù)。新啟動的Activity可用Intent.getExtras取出Bundle,然后用Bundles.getLong,getInt,getBoolean,getString等函數(shù)來取放進(jìn)去的值。
Data則是傳輸url。url可以是指我們熟悉的http,ftp等網(wǎng)絡(luò)地址,也可以指content來指向ContentProvider提供的資源。Intent.setData可以放入數(shù)據(jù),Intent.getData可以取出數(shù)據(jù)。
二、說說Activity,Intent,Service是什么關(guān)系 ?
一個Activity通常是一個單獨的屏幕,每一個Activity都被實現(xiàn)為一個單獨的類,這些類都是從Activity基類中繼承而來的。Activity類會顯示由視圖控件組成的用戶接口,并對視圖控件的事件做出響應(yīng)。
Intent的調(diào)用是用來進(jìn)行屏幕之間的切換。Intent描述應(yīng)用想要做什么。Intent數(shù)據(jù)結(jié)構(gòu)中兩個最重要的部分是動作和動作對應(yīng)的數(shù)據(jù),一個動作對應(yīng)一個動作數(shù)據(jù)。
Service是運行在后臺的代碼,不能與用戶交互,可以運行在自己的進(jìn)程里,也可以運行在其他應(yīng)用程序進(jìn)程的上下文里。需要一個Activity或者其他Context對象來調(diào)用。
Activity跳轉(zhuǎn)Activity,Activity啟動Service,Service打開Activity都需要Intent表明意圖,以及傳遞參數(shù),Intent是這些組件間信號傳遞的承載著。
三、請描述一下BroadcastReceiver。
Broadcast Receiver用于接收并處理廣播通知(broadcast announcements)。多數(shù)的廣播是系統(tǒng)發(fā)起的,如地域變換、電量不足、來電短信等。程序也可以播放一個廣播。程序可以有任意數(shù)量的broadcast receivers來響應(yīng)它覺得重要的通知。Broadcast receiver可以通過多種方式通知用戶: 啟動activity、使用NotificationManager、開啟背景燈、振動設(shè)備、播放聲音等,最典型的是在狀態(tài)欄顯示一個圖標(biāo),這樣用戶就可以點它打開看通知內(nèi)容。通常我們的某個應(yīng)用或系統(tǒng)本身在某些事件(電池電量不足、來電短信)來臨時會廣播一個Intent出去,我們利用注冊一個broadcast
receiver來監(jiān)聽這些Intent并獲取Intent中的數(shù)據(jù)。
四、在manifest和代碼中如何注冊和使用 broadcast receiver 。
在android的manifest中注冊
在代碼中注冊
1、 IntentFilter filter = new IntentFilter(“com.forrest.action.mybroadcast”);//和廣播中Intent的action對應(yīng);
2、 MyBroadcastReceiver br= new MyBroadcastReceiver();
3、 registerReceiver(br, filter);
五、請介紹下ContentProvider是如何實現(xiàn)數(shù)據(jù)共享的。
一個程序可以通過實現(xiàn)一個Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Content provider是以類似數(shù)據(jù)庫中的表的方式將自己的數(shù)據(jù)暴露。Content provider存儲和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。
要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個數(shù)據(jù)自己的Content Provider或者將你的數(shù)據(jù)添加到一個已經(jīng)存在的Content Provider中,前提是有相同數(shù)據(jù)類型并且有寫入Content Provider的權(quán)限,Android提供了Content Resolverr,外界的程序可以通過Content Resolver接口訪問Content Provider提供的數(shù)據(jù)。
六、請介紹下Android的數(shù)據(jù)存儲方式。
Android提供了5中存儲數(shù)據(jù)的方式,分別是以下幾種
1、使用Shared Preferences存儲數(shù)據(jù),用來存儲key-value,pairs格式的數(shù)據(jù),它是一個輕量級的鍵值存儲機制,只可以存儲基本數(shù)據(jù)類型。
2、使用文件存儲數(shù)據(jù),通過FileInputStream和FileOutputStream對文件進(jìn)行操作。在Android中,文件是一個應(yīng)用程序私有的,一個應(yīng)用程序無法讀寫其他應(yīng)用程序的文件。
3、使用SQLite數(shù)據(jù)庫存儲數(shù)據(jù),Android提供的一個標(biāo)準(zhǔn)數(shù)據(jù)庫,支持SQL語句。
4、使用Content Provider存儲數(shù)據(jù),是所有應(yīng)用程序之間數(shù)據(jù)存儲和檢索的一個橋梁,它的作用就是使得各個應(yīng)用程序之間實現(xiàn)數(shù)據(jù)共享。它是一個特殊的存儲數(shù)據(jù)的類型,它提供了一套標(biāo)準(zhǔn)的接口用來獲取數(shù)據(jù),操作數(shù)據(jù)。系統(tǒng)也提供了音頻、視頻、圖像和個人信息等幾個常用的Content Provider。如果你想公開自己的私有數(shù)據(jù),可以創(chuàng)建自己的Content Provider類,或者當(dāng)你對這些數(shù)據(jù)擁有控制寫入的權(quán)限時,將這些數(shù)據(jù)添加到Content Provider中實現(xiàn)共享。外部訪問通過Content Resolver去訪問并操作這些被暴露的數(shù)據(jù)。
5、使用網(wǎng)絡(luò)存儲數(shù)據(jù)
七、請介紹下Android系統(tǒng)中常用的五種布局。
最常用的布局方式為Absolute Layout、Relative Layout、Linear Layout、FrameLayout、TableLayout。其中Linear Layout和Relative Layout是最常用的方式,他們可以通過在xml配置文件或者代碼中進(jìn)行布局。
1、Frame Layout是最簡單的布局方式,放置的控件都只能羅列到左上角,控件會有重疊,不能進(jìn)行復(fù)雜的布局。
2、Linear Layout可以通過orientation屬性設(shè)置線性排列的方向是垂直還是縱向的,每行或每列只有一個元素,可以進(jìn)行復(fù)雜的布局。
3、Absolute Layout可以讓子元素指定準(zhǔn)確的x、y坐標(biāo)值,并顯示在屏幕上。Absolute Layout沒有頁邊框,允許元素之間相互重疊。它是絕對坐標(biāo),所以在實際中不提倡使用。
4、Relative Layout允許子元素制定他們相對于其他元素或父元素的位置(通過ID制定)。因此,你可以以右對齊,或上下,或置于屏幕中央的形式來排列兩個元素。元素按順序排列,因此如果第一個元素在屏幕的中央,那么相對于這個元素的其他元素將以屏幕中央的相對位置來排列。這個是相對于Absolute Layout的,采用相對坐標(biāo),所以在實際中比較常用。
5、Table Layout將以子元素的位置分配到行或列。一個Table Layout由許多的Table Row組成,每個Table Row都會定義一個row。Table Layout容器不會顯示row、column或者cell的邊線框。每個row擁有0個或多個的cell; 和html中的table差不多。在實際中也經(jīng)常使用。
八、談?wù)刄I中, Padding和Margin有什么區(qū)別?
Padding是控件的內(nèi)容相對控件的邊緣的邊距,而Margin是控件邊緣相對于其他控件的邊距。如下圖所示:
九、android本身的一些限制,比如apk包大小限制,讀取大文件時的時間限。
apk包大小限制不好說,有的apk為100M,還是能裝到手機上。一般的apk大小為5~10M左右。讀取大文件的時間應(yīng)該是在main線程里面,時間限制為5秒左右。
十、ListView如何提高其效率?
1、使用分頁加載,不要一次性加載所有數(shù)據(jù)。
2、復(fù)用convertView。在getItemView中,判斷converView是否為空,如果不為空,可復(fù)用。
3、異步加載圖片。Item中如果包含有webimage,那么最好異步加載。
4、快速滑動時,不顯示圖片。當(dāng)快速滑動列表(SCROLL_STATE_FLING),item中的圖片或獲取需要消耗資源的view,可以不顯示出來;而處于其他兩種狀態(tài)(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),則將那些view顯示出來。
查看更多關(guān)于“Android培訓(xùn)資訊”的相關(guān)文章>>