android面試題

android的動(dòng)畫有哪幾種?他們的特點(diǎn)和區(qū)別是什么?

答:兩種,一種是tween動(dòng)畫,一種是frame動(dòng)畫。tween動(dòng)畫,這種實(shí)現(xiàn)方式可以使視圖組件移動(dòng),放大或縮小以及產(chǎn)生透明度的變化。frame動(dòng)畫,傳統(tǒng)的動(dòng)畫方法,通過順序的播放排列好的圖片來實(shí)現(xiàn),類似電影。

handler進(jìn)制的原理:

答:android提供了handler和looper來滿足線程間的通信。Handler先進(jìn)先出原則。looper用來管理特定線程內(nèi)對(duì)象之間的消息交換(message Exchange).

1)looper:一個(gè)線程可以產(chǎn)生一個(gè)looper對(duì)象,由它來管理此線程里的message queue(消息隊(duì)列)

2)handler:你可以構(gòu)造一個(gè)handler對(duì)象來與looper溝通,以便push新消息到messagequeue里;或者接收looper(從messagequeue里取出)所送來的消息。

3)messagequeue:用來存放線程放入的消息。

4)線程:UI thread 通常就是main thread,而android啟動(dòng)程序時(shí)會(huì)為它建立一個(gè)message queue.

Activity的生命周期:

答:onCreate: 在這里創(chuàng)建界面,做一些數(shù)據(jù) 的初始化工作

onStart: 到這一步變成用戶可見不可交互的

onResume:變成和用戶可交互 的,(在activity 棧系統(tǒng)通過棧的方式管理這些個(gè)Activity的最上面,運(yùn)行完彈出棧,則回到上一個(gè)Activity)

onPause: 到這一步是可見但不可交互的,系統(tǒng)會(huì)停止動(dòng)畫 等消耗CPU 的事情從上文的描述已經(jīng)知道,應(yīng)該在這里保存你的一些數(shù)據(jù),因?yàn)檫@個(gè)時(shí)候你的程序的優(yōu)先級(jí)降低,有可能被系統(tǒng)收回。在這里保存的數(shù)據(jù),應(yīng)該在

onstop: 變得不可見,被下一個(gè)activity覆蓋了

onDestroy: 這是activity被干掉前最后一個(gè)被調(diào)用方法了,可能是外面類調(diào)用finish方法或者是系統(tǒng)為了節(jié)省空間將它暫時(shí)性的干掉

o設(shè)備橫豎屏切換的時(shí)候,接下來會(huì)發(fā)生什么?

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方法

Android啟動(dòng)Service的兩種方式是什么?

startService:生命周期與調(diào)用者不同。啟動(dòng)后若調(diào)用者未調(diào)用stopService而直接退出,Service仍會(huì)運(yùn)行

bindService:生命周期與調(diào)用者綁定,調(diào)用者一旦退出,Service就會(huì)調(diào)用unBind->onDestroy

談?wù)勀銓?duì)Android中Context的理解?

Context:包含上下文信息(外部值) 的一個(gè)參數(shù). Android 中的 Context 分三種,Application Context ,Activity Context ,Service Context.

它描述的是一個(gè)應(yīng)用程序環(huán)境的信息,通過它我們可以獲取應(yīng)用程序的資源和類,也包括一些應(yīng)用級(jí)別操作,例如:啟動(dòng)一個(gè)Activity,發(fā)送廣播,接受Intent信息等

.請介紹下AsyncTask的內(nèi)部實(shí)現(xiàn),適用的場景是?

AsyncTask內(nèi)部也是Handler機(jī)制來完成的,只不過Android提供了執(zhí)行框架來提供線程池來執(zhí)行相應(yīng)地任務(wù),因?yàn)榫€程池的大小問題,所以AsyncTask只應(yīng)該用來執(zhí)行耗時(shí)時(shí)間較短的任務(wù),比如HTTP請求,大規(guī)模的下載和數(shù)據(jù)庫的更改不適用于AsyncTask,因?yàn)闀?huì)導(dǎo)致線程池堵塞,沒有線程來執(zhí)行其他的任務(wù),導(dǎo)致的情形是會(huì)發(fā)生AsyncTask根本執(zhí)行不了的問題。

談?wù)勀銓?duì)binder機(jī)制的理解?

binder是一種IPC機(jī)制,進(jìn)程間通訊的一種工具. Java層可以利用aidl工具來實(shí)現(xiàn)相應(yīng)的接口.

11.Android中進(jìn)程間通信有哪些實(shí)現(xiàn)方式? Intent,Binder(AIDL),Messenger,BroadcastReceiver

介紹下實(shí)現(xiàn)一個(gè)自定義view的基本流程

1、自定義View的屬性 編寫attr.xml文件

2、在layout布局文件中引用,同時(shí)引用命名空間

3、在View的構(gòu)造方法中獲得我們自定義的屬性 ,在自定義控件中進(jìn)行讀取(構(gòu)造方法拿到attr.xml文件值)

4、重寫onMesure

5、重寫onDraw

Android多線程的實(shí)現(xiàn)方式有哪些?

Thread & AsyncTask

Thread 可以與Loop 和 Handler 共用建立消息處理隊(duì)列

AsyncTask 可以作為線程池并行處理多任務(wù)

android 中線程與線程,進(jìn)程與進(jìn)程之間如何通信

1 、一個(gè) Android 程序開始運(yùn)行時(shí),會(huì)單獨(dú)啟動(dòng)一個(gè) Process 。

默認(rèn)情況下,所有這個(gè)程序中的 Activity 或者 Service 都會(huì)跑在這個(gè) Process 。

默認(rèn)情況下,一個(gè) Android 程序也只有一個(gè) Process ,但一個(gè) Process 下卻可以有許多個(gè) Thread。

ndroid中五種數(shù)據(jù)存儲(chǔ)方式分別是什么?他們的特點(diǎn)?

Android提供了五種存取數(shù)據(jù)的方式

(1)SharedPreference,存放較少的五種類型的數(shù)據(jù),只能在同一個(gè)包內(nèi)使 用,生成XML的格式存放在設(shè)備中

2) SQLite數(shù)據(jù)庫,存放各種數(shù)據(jù),是一個(gè)輕量級(jí)的嵌入式數(shù)據(jù)庫

(3) File文件,通過讀取寫入方式生成文件存放數(shù)據(jù)

4) ContentProvider,主要用于讓其他應(yīng)用程序使用保存的數(shù)據(jù)

(5)通過網(wǎng)絡(luò)獲取數(shù)據(jù)和寫入數(shù)據(jù)到網(wǎng)絡(luò)存儲(chǔ)空間

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

創(chuàng)建一個(gè)屬于你自己的Content provider或者將你的數(shù)據(jù)添加到一個(gè)已經(jīng)存在的Content provider中前提是有相同數(shù)據(jù)類型并且有寫入Content provider的權(quán)限。

注冊廣播有幾種方式,這些方式有何優(yōu)缺點(diǎn)?

ndroid廣播機(jī)制(兩種注冊方法)

一種是代碼動(dòng)態(tài)注冊

一種是在AndroidManifest.xml中配置廣播

兩種注冊類型的區(qū)別是:

1)第一種不是常駐型廣播,也就是說廣播跟隨程序的生命周期。

2)第二種是常駐型,也就是說當(dāng)應(yīng)用程序關(guān)閉后,如果有信息廣播來,程序也會(huì)被系統(tǒng)調(diào)用自動(dòng)運(yùn)行。

請解釋下Android程序運(yùn)行時(shí)權(quán)限與文件系統(tǒng)權(quán)限的區(qū)別。

運(yùn)行時(shí)權(quán)限D(zhuǎn)alvik( android授權(quán))

文件系統(tǒng) linux 內(nèi)核授權(quán)


系統(tǒng)上安裝了多種瀏覽器,能否指定某瀏覽器訪問指定頁面?

請說明原由。通過直接發(fā)送Uri把參數(shù)帶過去,或者通過manifest里的intentfilter里的data屬性

Android事件分發(fā)機(jī)制

Android中與事件分發(fā)相關(guān)的方法主要包括dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三個(gè)方法,而事件分發(fā)一般會(huì)經(jīng)過三種容器,分別為Activity、ViewGroup、View。下表對(duì)這三種容器分別擁有的事件分發(fā)相關(guān)方法進(jìn)行了整理。

* 分發(fā): dispatchTouchEvent如果返回true,則表示在當(dāng)前View或者其子View(子子...View)中,找到了處理事件的View;反之,則表示沒有尋找到

* 攔截: onInterceptTouchEvent如果返回true,則表示這個(gè)事件由當(dāng)前View進(jìn)行處理,不管處理結(jié)果如何,都不會(huì)再向子View傳遞這個(gè)事件;反之,則表示當(dāng)前View不主動(dòng)處理這個(gè)事件,除非他的子View返回的事件分發(fā)結(jié)果為false

* 消費(fèi): onTouchEvent如果返回true,則表示當(dāng)前View就是事件傳遞的終點(diǎn);反之,則表示當(dāng)前View不是事件傳遞的終點(diǎn)

深入淺出反射

什么是反射?

??反射是一種能夠在程序運(yùn)行時(shí)動(dòng)態(tài)訪問、修改某個(gè)類中任意屬性(狀態(tài))和方法(行為)的機(jī)制(包括private實(shí)例和方法),java反射機(jī)制提供了以下幾個(gè)功能:

* 在運(yùn)行時(shí)判斷任意一個(gè)對(duì)象所屬的類;

* 在運(yùn)行時(shí)構(gòu)造任意一個(gè)類的對(duì)象;

* 在運(yùn)行時(shí)判斷任意一個(gè)類所具有的成員變量和方法;

* 在運(yùn)行時(shí)調(diào)用任意一個(gè)對(duì)象的方法。

??反射涉及到四個(gè)核心類:

* java.lang.Class.java:類對(duì)象

* java.lang.reflect.Constructor.java:類的構(gòu)造器對(duì)象;

* java.lang.reflect.Method.java:類的方法對(duì)象;

* java.lang.reflect.Field.java:類的屬性對(duì)象;

反射有什么用?

* 操作因訪問權(quán)限限制的屬性和方法;

* 實(shí)現(xiàn)自定義注解;

* 動(dòng)態(tài)加載第三方j(luò)ar包,解決android開發(fā)中方法數(shù)不能超過65536個(gè)的問題;

* 按需加載類,節(jié)省編譯和初始化APK的時(shí)間;

反射工作原理

??當(dāng)我們編寫完一個(gè)Java項(xiàng)目之后,每個(gè)java文件都會(huì)被編譯成一個(gè).class文件,這些Class對(duì)象承載了這個(gè)類的所有信息,包括父類、接口、構(gòu)造函數(shù)、方法、屬性等,這些class文件在程序運(yùn)行時(shí)會(huì)被ClassLoader加載到虛擬機(jī)中。當(dāng)一個(gè)類被加載以后,Java虛擬機(jī)就會(huì)在內(nèi)存中自動(dòng)產(chǎn)生一個(gè)Class對(duì)象。我們通過new的形式創(chuàng)建對(duì)象實(shí)際上就是通過這些Class來創(chuàng)建,只是這個(gè)過程對(duì)于我們是不透明的而已。

??反射的工作原理就是借助Class.java、Constructor.java、Method.java、Field.java這四個(gè)類在程序運(yùn)行時(shí)動(dòng)態(tài)訪問和修改任何類的行為和狀態(tài)。

Java有幾種基本數(shù)據(jù)類型?

a) byte,short,int,long,char,boolean,float,double


史上最精煉android四大組件基礎(chǔ)總結(jié)(忘記了的可以過一遍)

Android基礎(chǔ)知識(shí)總結(jié)

四大組件之一活動(dòng)

活動(dòng)狀態(tài)

運(yùn)行狀態(tài):活動(dòng)處于棧頂

暫停狀態(tài):活動(dòng)不處于棧頂,但仍然可見

停止?fàn)顟B(tài):完全不可見

銷毀狀態(tài):離開返回棧

生存期

onCreate()

onStart():不可見到可見調(diào)用

onResume():與用戶進(jìn)行交互,處于棧頂運(yùn)行態(tài)

onPause():準(zhǔn)備啟動(dòng)或者恢復(fù)另一活動(dòng),

onStop():完全不可見的時(shí)候調(diào)用

onDestory():被銷毀之前調(diào)用,之后變?yōu)殇N毀狀態(tài)

onRestart():這個(gè)方法由停止?fàn)顟B(tài)變?yōu)檫\(yùn)行狀態(tài)之前調(diào)用,也就是活動(dòng)重新啟動(dòng)了

活動(dòng)的啟動(dòng)模式

在配置文件Activity中配置launchMode屬性

standard 默認(rèn)每次啟動(dòng)一個(gè)新活動(dòng),它就會(huì)在返回棧中入棧,并處于棧頂位置。如果我們在一個(gè)Activity中跳轉(zhuǎn)自己。點(diǎn)擊兩次創(chuàng)建之后,我們需連按三次Back建才能退出程序。

singleTop

解決了默認(rèn)情況下,在棧頂還要?jiǎng)?chuàng)建不合理。也就是如果Activity處于棧頂不創(chuàng)建,不處于棧頂就會(huì)重新創(chuàng)建。

singleTask

解決一個(gè)棧中有多個(gè)Activity實(shí)例,也就是如果發(fā)現(xiàn)已經(jīng)存在棧中就把這活動(dòng)之上的統(tǒng)統(tǒng)出棧,沒有則創(chuàng)建

singleInstance

指定為該模式的活動(dòng)會(huì)啟動(dòng)一個(gè)新的返回棧來管理這個(gè)活動(dòng)。

四大組件之二廣播

標(biāo)準(zhǔn)廣播:異步執(zhí)行的廣播

有序廣播:同步執(zhí)行的廣播(對(duì)于廣播接收器是有先后順序)

接收系統(tǒng)廣播

動(dòng)態(tài)注冊監(jiān)聽網(wǎng)絡(luò)變化

在代碼中注冊為動(dòng)態(tài)注冊

在AndroidManifest.xml文件中注冊時(shí)靜態(tài)注冊

四大組件之三服務(wù)

onCreate():在服務(wù)創(chuàng)建的時(shí)候調(diào)用

onStartCommand()方法會(huì)在每次服務(wù)啟動(dòng)的時(shí)候調(diào)用

onDestory()方法會(huì)在服務(wù)銷毀的時(shí)候調(diào)用(回收不再使用的資源)

需要在AndroidManifest.xml文件中注冊才能生效

啟動(dòng)和停止服務(wù)

主要也是借助Intent來實(shí)現(xiàn)的

啟動(dòng)服務(wù)

?startService(new Intent(this,MyService.class))

停止服務(wù)

?stopService(new Intent(this,MyService.class))

服務(wù)的生命周期

onCreate() 服務(wù)之前沒有創(chuàng)建過就會(huì)先執(zhí)行

onStartCommand()方法執(zhí)行每次調(diào)用startService()就會(huì)執(zhí)行。但是還是只存在一個(gè)實(shí)例

onBind():在Context的bindService()調(diào)用時(shí)就會(huì)執(zhí)行該方法

onDestory(): 調(diào)用startService后再調(diào)用stopService()時(shí)就會(huì)執(zhí)行,調(diào)用bindService 后又調(diào)用unbindService()也會(huì)執(zhí)行

當(dāng)調(diào)用了startService()又調(diào)用bindService()此時(shí)只有當(dāng)兩個(gè)同時(shí)調(diào)用stopService和unbindService().onDestory()才會(huì)執(zhí)行。


內(nèi)容提供器Content Provider

內(nèi)容提供器簡介

為了在應(yīng)用程序之間交換數(shù)據(jù),Android提供了ContentProvider,

ContentProvider是不同應(yīng)用程序之間進(jìn)行數(shù)據(jù)交換的標(biāo)準(zhǔn)API,

當(dāng)一個(gè)應(yīng)用程序需要把自己的數(shù)據(jù)暴露給其他程序使用時(shí),

該應(yīng)用程序就可通過提供ContentProvider來實(shí)現(xiàn),其他應(yīng)用程序可通過ContentResolver

來操作ContentProvider暴露的數(shù)據(jù),

包括增加數(shù)據(jù)

刪除數(shù)據(jù)

修改數(shù)據(jù)

查詢數(shù)據(jù)等。

ContentProvider也是Android應(yīng)用的四大組件之一,

需要在AndroidManifest.xml文件中進(jìn)行配置.

在A應(yīng)用編寫ContentProvider,

在B應(yīng)用

調(diào)用getContentResolver,獲取resolver對(duì)象

調(diào)用insert(),delete(),update(),query(),傳入U(xiǎn)RI實(shí)現(xiàn)數(shù)據(jù)訪問

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,460評(píng)論 6 538
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,067評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,467評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,468評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,184評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,582評(píng)論 1 325
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,616評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,794評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,343評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,096評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,291評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,863評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,513評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,941評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,190評(píng)論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,026評(píng)論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,253評(píng)論 2 375

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,692評(píng)論 25 708
  • 我們都在尋找永遠(yuǎn) 是一個(gè)光年? 是一個(gè)瞬間? 好像沒有邊。 校園蹣跚的情侶 勾肩搭背的兄弟 時(shí)過境遷 才懂 不是海...
    貓叔說事兒閱讀 185評(píng)論 0 3
  • 以為是你 自作多情
    Carrie_WXT閱讀 171評(píng)論 0 1
  • 下班后我去了附近的圖書大廈,進(jìn)去后發(fā)覺涼氣襲人,我隨手拿了本雜志翻閱起來,此時(shí)迎面走來一個(gè)中年男子穿著短袖T恤,上...
    華無缺閱讀 176評(píng)論 0 0
  • 解讀2016之大數(shù)據(jù)篇:跨越巔峰,邁向成熟 http://www.infoq.com/cn/articles/i...
    葡萄喃喃囈語閱讀 3,719評(píng)論 0 5