中文国产日韩欧美视频,午夜精品999,色综合天天综合网国产成人网,色综合视频一区二区观看,国产高清在线精品,伊人色播,色综合久久天天综合观看

最新最全Android 面試題(2)

時(shí)間:2024-09-08 02:37:56 學(xué)人智庫 我要投稿
  • 相關(guān)推薦

最新最全Android 面試題(2)

  12、 調(diào)用與被調(diào)用:我們的通信使者Intent

最新最全Android 面試題(2)

  要說Intent了,Intent就是這個(gè)這個(gè)意圖 ,應(yīng)用程序間Intent進(jìn)行交流,打個(gè)電話啦,來個(gè)

  電話啦都會(huì)發(fā)Intent, 這個(gè)是Android架構(gòu)的松耦合的精髓部分,大大提高了組件的復(fù)用性,比如你要在你的應(yīng)用程序中點(diǎn)擊按鈕,給某人打電話,很簡(jiǎn)單啊,看下代碼先:

  Java代碼

  Intent intent = new Intent();

  intent.setAction(Intent.ACTION_CALL);

  intent.setData(Uri.parse("tel:" + number));

  startActivity(intent);

  扔出這樣一個(gè)意圖,系統(tǒng)看到了你的意圖就喚醒了電話撥號(hào)程序,打出來電話。什么讀聯(lián)系人,發(fā)短信啊,郵件啊,統(tǒng)統(tǒng)只需要扔出intent就好了,這個(gè)部分設(shè)計(jì) 地確實(shí)很好啊。

  那Intent通過什么來告訴系統(tǒng)需要誰來接受他呢?

  通常使用Intent有兩種方法,第一種是直接說明需要哪一個(gè)類來接收代碼如下:

  Java代碼

  Intent intent = new Intent(this, MyActivity.class);

  intent.getExtras().putString("id", "1");

  tartActivity(intent);

  第一種方式很明顯,直接指定了MyActivity為接受者,并且傳了一些數(shù)據(jù)給MyActivity,在MyActivity里可以用getIntent()來的到這個(gè)intent和數(shù)據(jù)。

  第二種就需要先看一下AndroidMenifest中的intentfilter的配置了

  Xml代碼

  < action

  android:name="android.intent.action.VIEW"

  />

  < action

  android:value="android.intent.action.EDIT"

  />

  < action

  android:value="android.intent.action.PICK"

  />

  < category

  android:name="android.intent.category.DEFAULT"

  />

  < data

  android:mimeType="vnd.android.cursor.dir/vnd.google.note"

  />

  這里面配置用到了action, data, category這些東西,那么聰明的你一定想到intent里也會(huì)有這些東西,然后一匹配不就找到接收者了嗎?

  action其實(shí)就是一個(gè)意圖的字符串名稱。

  上面這段intent-filter的配置文件說明了這個(gè)Activity可以接受不同的Action,當(dāng)然相應(yīng)的程序邏輯也不一樣咯,提一下那個(gè) mimeType,他是在ContentProvider里定義的,你要是自己實(shí)現(xiàn)一個(gè)ContentProvider就知道了,必須指定 mimeType才能讓數(shù)據(jù)被別人使用。

  不知道原理說明白沒,總結(jié)一句,就是你調(diào)用別的界面不是直接new那個(gè)界面,而是通過扔出一個(gè)intent,讓系統(tǒng)幫你去調(diào)用那個(gè)界面,這樣就多么松藕合啊,而且符合了生命周期被系統(tǒng)管理的原則。

  想知道category都有啥,Android為你預(yù)先定制好的action都有啥等等,請(qǐng)親自訪問官方鏈接Intent

  ps:想知道怎么調(diào)用系統(tǒng)應(yīng)用程序的同學(xué),可以仔細(xì)看一下你的logcat,每次運(yùn)行一個(gè)程序的時(shí)候是不是有一些信息比如:

  Starting activity: Intent { action=android.intent.action.MAINcategories={android.intent.category.LAUNCHER} flags=0x10200000comp={com.android.camera/com.android.camera.GalleryPicker} }

  再對(duì)照一下Intent的一些set方法,就知道怎么調(diào)用咯,希望你喜歡:)

  13. 如何退出Activity?如何安全退出已調(diào)用多個(gè)Activity的Application?

  對(duì)于單一Activity的應(yīng)用來說,退出很簡(jiǎn)單,直接finish()即可。

  當(dāng)然,也可以用killProcess()和System.exit()這樣的方法。

  但是,對(duì)于多Activity的應(yīng)用來說,在打開多個(gè)Activity后,如果想在最后打開的Activity直接退出,上邊的方法都是沒有用的,因?yàn)樯线叺姆椒ǘ际墙Y(jié)束一個(gè)Activity而已。

  當(dāng)然,網(wǎng)上也有人說可以。

  就好像有人問,在應(yīng)用里如何捕獲Home鍵,有人就會(huì)說用keyCode比較KEYCODE_HOME即可,而事實(shí)上如果不修改framework,根本不可能做到這一點(diǎn)一樣。

  所以,最好還是自己親自試一下。

  那么,有沒有辦法直接退出整個(gè)應(yīng)用呢?

  在2.1之前,可以使用ActivityManager的restartPackage方法。

  它可以直接結(jié)束整個(gè)應(yīng)用。在使用時(shí)需要權(quán)限android.permission.RESTART_PACKAGES。

  注意不要被它的名字迷惑。

  可是,在2.2,這個(gè)方法失效了。

  在2.2添加了一個(gè)新的方法,killBackgroundProcesses(),需要權(quán)限 android.permission.KILL_BACKGROUND_PROCESSES。

  可惜的是,它和2.2的restartPackage一樣,根本起不到應(yīng)有的效果。

  另外還有一個(gè)方法,就是系統(tǒng)自帶的應(yīng)用程序管理里,強(qiáng)制結(jié)束程序的方法,forceStopPackage()。

  它需要權(quán)限android.permission.FORCE_STOP_PACKAGES。

  并且需要添加android:sharedUserId=”android.uid.system”屬性

  同樣可惜的是,該方法是非公開的,他只能運(yùn)行在系統(tǒng)進(jìn)程,第三方程序無法調(diào)用。

  因?yàn)樾枰贏ndroid.mk中添加LOCAL_CERTIFICATE := platform。

  而Android.mk是用于在Android源碼下編譯程序用的。

  從以上可以看出,在2.2,沒有辦法直接結(jié)束一個(gè)應(yīng)用,而只能用自己的辦法間接辦到。

  現(xiàn)提供幾個(gè)方法,供參考:

  1、拋異常強(qiáng)制退出:

  該方法通過拋異常,使程序Force Close。

  驗(yàn)證可以,但是,需要解決的問題是,如何使程序結(jié)束掉,而不彈出Force Close的窗口。

  2、記錄打開的Activity:

  每打開一個(gè)Activity,就記錄下來。在需要退出時(shí),關(guān)閉每一個(gè)Activity即可。

  3、發(fā)送特定廣播:

  在需要結(jié)束應(yīng)用時(shí),發(fā)送一個(gè)特定的廣播,每個(gè)Activity收到廣播后,關(guān)閉即可。

  4、遞歸退出

  在打開新的Activity時(shí)使用startActivityForResult,然后自己加標(biāo)志,在onActivityResult中處理,遞歸關(guān)閉。

  除了第一個(gè),都是想辦法把每一個(gè)Activity都結(jié)束掉,間接達(dá)到目的。

  但是這樣做同樣不完美。

  你會(huì)發(fā)現(xiàn),如果自己的應(yīng)用程序?qū)γ恳粋(gè)Activity都設(shè)置了nosensor,在兩個(gè)Activity結(jié)束的間隙,sensor可能有效了。

  但至少,我們的目的達(dá)到了,而且沒有影響用戶使用。

  為了編程方便,最好定義一個(gè)Activity基類,處理這些共通問題。

  摘自:http://blog.csdn.net/debug2/archive/2011/02/18/6193644.aspx

  14. 請(qǐng)介紹下Android中常用的五種布局。

  1、 LinearLayout – 線性布局。

  orientation – 容器內(nèi)元素的排列方式。vertical: 子元素們垂直排列;horizontal: 子元素們水平排列

  gravity – 內(nèi)容的排列形式。常用的有 top, bottom, left, right, center 等

  2、 AbsoluteLayout – 絕對(duì)布局。

  layout_x – x 坐標(biāo)。以左上角為頂點(diǎn)

  layout_y – y 坐標(biāo)。以左上角為頂點(diǎn)

  3、 TableLayout – 表格式布局

  表格布局主要以行列的形式來管理子控件,其中每一行即一個(gè)TableRow對(duì)象,每個(gè)TableRow對(duì)象可以添加子控件,并且每加入一個(gè)空間即相當(dāng)于添加了一列

  4、 RelativeLayout – 相對(duì)布局。

  layout_centerInParent – 將當(dāng)前元素放置到其容器內(nèi)的水平方向和垂直方向的中央位置(類似的屬性有 :layout_centerHorizontal, layout_alignParentLeft 等)

  layout_marginLeft – 設(shè)置當(dāng)前元素相對(duì)于其容器的左側(cè)邊緣的距離

  layout_below – 放置當(dāng)前元素到指定的元素的下面

  layout_alignRight – 當(dāng)前元素與指定的元素右對(duì)齊

  5、 FrameLayout – 層疊布局。以左上角為起點(diǎn),將 FrameLayout 內(nèi)的元素一層覆蓋一層地顯示,在幀布局中,先添加的圖片會(huì)被后添加的圖片覆蓋。

  摘自:http://javalover00000.javaeye.com/blog/851266

  15. 請(qǐng)介紹下Android的數(shù)據(jù)存儲(chǔ)方式。

  Android提供了5種方式存儲(chǔ)數(shù)據(jù):

  1、使用SharedPreferences存儲(chǔ)數(shù)據(jù);

  2、文件存儲(chǔ)數(shù)據(jù);

  3、SQLite數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù);

  4、使用ContentProvider存儲(chǔ)數(shù)據(jù);

  5、網(wǎng)絡(luò)存儲(chǔ)數(shù)據(jù);

  Android 中的數(shù)據(jù)存儲(chǔ)都是私有的,其他應(yīng)用程序都是無法訪問的,除非通過ContentResolver獲取其他程序共享的數(shù)據(jù)。

  摘自:http://www.moandroid.com/?p=319

  16. 請(qǐng)介紹下ContentProvider是如何實(shí)現(xiàn)數(shù)據(jù)共享的。

  一個(gè)程序可以通過實(shí)現(xiàn)一個(gè)Content provider的抽象接口將自己的數(shù)據(jù)完全暴露出去,而且Content providers是以類似數(shù)據(jù)庫中表的方式將數(shù)據(jù)暴露。Content providers存儲(chǔ)和檢索數(shù)據(jù),通過它可以讓所有的應(yīng)用程序訪問到,這也是應(yīng)用程序之間唯一共享數(shù)據(jù)的方法。要想使應(yīng)用程序的數(shù)據(jù)公開化,可通過2種方法:創(chuàng)建一個(gè)屬于你自己的Content provider或者將你的數(shù)據(jù)添加到一個(gè)已經(jīng)存在的Content provider中,前提是有相同數(shù)據(jù)類型并且有寫入Content provider的權(quán)限。

  如何通過一套標(biāo)準(zhǔn)及統(tǒng)一的接口獲取其他應(yīng)用程序暴露的數(shù)據(jù)?Android提供了ContentResolver,外界的程序可以通過ContentResolver接口訪問ContentProvider提供的數(shù)據(jù)。

  參考:http://www.moandroid.com/?p=319

【最新最全Android 面試題(2)】相關(guān)文章:

android面試題目09-08

Android工程師的面試題08-07

Android工程師面試題10-24

關(guān)于Android工程師面試題09-19

最新最全勵(lì)志說說09-30

最全經(jīng)典廣告語(2)08-29

最全的結(jié)婚對(duì)聯(lián)大全(2)10-25

德國(guó)公司經(jīng)典面試題(2)07-10

最全世界經(jīng)典廣告語大全(2)10-08

澳洲八大最新最全錄取要求10-22