1. 程式人生 > >Android開發面試經——2.常見Android基礎筆試題

Android開發面試經——2.常見Android基礎筆試題

1、Android四大元件是什麼?作用以及應用場景?
Android 的四大元件分別是是Activity,Service,BroadcastReceiver和ContentProvider;

Activity:
從字面上理解,Activity是活動的意思。一個Activity通常展現為一個視覺化的使用者介面,是Android程式與使用者互動的視窗,也是Android元件中最基本也是最複雜的一個元件。從視覺效果來看,一個Activity佔據當前的視窗,響應所有視窗事件,具備有控制元件,選單等介面元素。從內部邏輯來看,Activity需要為了保持各個介面狀態,需要做很多持久化的事情,還需要妥善管理生命週期,和一些轉跳邏輯。

Service
服務是執行在後臺的一個元件,從某從意義上說,服務就像一個沒有介面的Activity。它們在很多Android的概念方面比較接近,封裝有一個完整的功能邏輯實現,接受上層指令,完成相關的事件,定義好需要接受的Intent提供同步和非同步的介面。

BroadcastReceiver
廣播接收者,不執行任何任務,廣播是一種廣泛運用的在應用程式之間傳輸資訊的機制 。而 BroadcastReceiver 是對傳送出來的廣播進行過濾接收並響應的一類元件。Broadcast Receiver 不包含任何使用者介面。然而它們可以啟動一個Activity以響應接受到的資訊,或者通過NotificationManager通知使用者。可以通過多種方式使使用者知道有新的通知產生:閃動背景燈、震動裝置、發出聲音等等。通常程式會在狀態列上放置一個持久的圖示,使用者可以開啟這個圖示並讀取通知資訊。在Android中還有一個很重要的概念就是Intent,如果說Intent是一個對動作和行為的抽象描述,負責元件之間程式之間進行訊息傳遞。那麼Broadcast Receiver元件就提供了一種把Intent作為一個訊息廣播出去,由所有對其感興趣的程式對其作出反應的機制。

Content Provider
即內容提供者,作為應用程式之間唯一的共享資料的途徑,Content Provider 主要的功能就是儲存並檢索資料以及向其他應用程式提供訪問資料。
對應用而言,也可以將底層資料封裝成ContentProvider,這樣可以有效的遮蔽底層操作的細節,並且使程式保持良好的擴充套件性和開放性。Android提供了一些主要資料型別的Contentprovider,比如音訊、視訊、圖片和私人通訊錄等。可在android.provider包下面找到一些android提供的Contentprovider。可以獲得這些Contentprovider,查詢它們包含的資料,當然前提是已獲得適當的讀取許可權。如果我們想公開自己應用程式的資料,可以建立自己的 Content provider 的介面。

2、android中的動畫有哪幾類,它們的特點和區別是什麼?
兩種,一種是Tween動畫、還有一種是Frame動畫。Tween動畫,這種實現方式可以使檢視元件移動、放大、縮小以及產生透明度的變化;另一種Frame動畫,傳統的動畫方法,通過順序的播放排列好的圖片來實現,類似電影。

3、後臺的activity被系統回收怎麼辦?如何在被系統回收之前儲存當前狀態?

當一個Activity被pause或者stop的時候,這個Activity的物件實際上還是儲存在記憶體中,因此這個Activity中的資訊(成員和狀態資訊)還可以重新獲取到.
如果系統為了整理記憶體而銷燬了Activity物件時,系統沒法簡單的原封不動地恢復先前的Activity物件及其狀態資訊.
Activity中提供了一個方法:onSavedInstanceState(Bundle obj).當系統銷燬一個Activity時,會將Activity的狀態資訊已鍵值對形式存放在bundle物件中.
第一次啟動Activity時,這個bundle物件是空的,null.如果Activity被系統銷燬了,然後使用者要回退回去看的話,系統會呼叫這個Activity的onCreate方法,並把bundle物件傳遞過去.

4. 請描述一下Activity 生命週期。
這裡寫圖片描述
5. 如何將一個Activity設定成視窗的樣式。
在AndroidManifest.xml 中定義Activity的地方一句話android:theme=”@android:style/Theme.Dialog”或android:theme=”@android:style/Theme.Translucent”就變成半透明的

6.註冊廣播有幾種方式,有何優缺點?
有兩種,一種是程式碼動態註冊:
//生成廣播處理
smsBroadCastReceiver = new SmsBroadCastReceiver();
//例項化過濾器並設定要過濾的廣播

IntentFilter intentFilter = new IntentFilter(“android.provider.Telephony.SMS_RECEIVED”);

//註冊廣播
BroadCastReceiverActivity.this.registerReceiver(smsBroadCastReceiver, intentFilter);
一種是在AndroidManifest.xml中配置廣播

 <!--廣播註冊-->  
        <receiver android:name=".SmsBroadCastReceiver">  
            <intent-filter android:priority="20">  
                <action android:name="android.provider.Telephony.SMS_RECEIVED"/>  
            </intent-filter>  
        </receiver>  

兩種註冊型別的區別是:
1)第一種不是常駐型廣播,也就是說廣播跟隨程式的生命週期
2)第二種是常駐型,也就是說當應用程式關閉後,如果有資訊廣播來,程式也會被系統呼叫自動執行。
註冊的方法有兩種,一種是靜態註冊,一種是動態註冊。
動態註冊優點: 在 Android 的廣播機制中, 動態註冊的優先順序是要高於靜態註冊優先順序的 , 因此在必要的情況下,我們是需要動態註冊廣播接收器的。
靜態註冊優點:動態註冊廣播接收器還有一個特點,就是當用來註冊的 Activity 關掉後 ,廣播也就失效了。同時反映了靜態註冊的一個優勢,就是無需擔憂廣播接收器是否被關閉 , 只要裝置是開啟狀態,廣播接收器就是開啟著的。

7.IntentService有何優點?
普通的service ,預設執行在ui main 主執行緒
這是帶有非同步處理的service類,
非同步處理的方法 OnHandleIntent()
OnHandleIntent() 處理耗時的操作
Android的程序處理器現在會盡可能的不kill掉你

8.橫豎屏切換時候activity的生命週期?
1、不設定Activity的android:configChanges時,切屏會重新呼叫各個生命週期,切橫屏時會執行一次,切豎屏時會執行兩次
  2、設定Activity的android:configChanges=”orientation”時,切屏還是會重新呼叫各個生命週期,切橫、豎屏時只會執行一次
  3、設定Activity的android:configChanges=”orientation|keyboardHidden”時,切屏不會重新呼叫各個生命週期,只會執行onConfigurationChanged方法
  
9、如何將SQLite資料庫(dictionary.db檔案)與apk檔案一起釋出? 如何將開啟res raw目錄中的資料庫檔案?
  解答:以將dictionary.db檔案複製到res raw目錄中 ,在Android中不能直接開啟res raw目錄中的資料庫檔案,而需要在程式第一次啟動時將該檔案複製到手機記憶體或SD卡的某個目錄中,然後再開啟該資料庫檔案。複製的基本方法是使用getResources().openRawResource方法獲得res raw目錄中資源的 InputStream物件,然後將該InputStream物件中的資料寫入其他的目錄中相應檔案中。在Android SDK中可以使用SQLiteDatabase.openOrCreateDatabase方法來開啟任意目錄中的SQLite ;
  
10.AndroidManifest.xml檔案中主要包含哪些資訊
說明應用程式的java 包,該包名是應用程式的唯一標識;
描述應用程式的元件:該應用程式由哪些activity,service,broadcast receiver和content provider組成;
宣告應用程式所必須具備的許可權,用以訪問受保護的部分API,以及與其他應用程式的互動;
宣告應用程式所需要的Android API的最低版本級別,比如1.0,1.1,1.5;
manifest:根節點,描述了 package 中所有的內容。
uses-permission:請求你的 package 正常運作所需賦予的安全許可。
permission: 聲明瞭安全許可來限制哪些程式能你 package 中的元件和功能。
instrumentation:聲明瞭用來測試此 package 或其他 package 指令元件的程式碼。
application:包含 package 中 application 級別元件宣告的根節點。
activity:Activity 是用來與使用者互動的主要工具。
receiver:IntentReceiver 能使的 application 獲得資料的改變或者發生的操作,即使它當 前不在執行。
service:Service 是能在後臺執行任意時間的元件。
provider:ContentProvider 是用來管理持久化資料併發布給其他應用程式使用的元件。

11.Android資料儲存方式
一.SharedPreferences方式:它是 Android提供的用來儲存一些簡單配置資訊的一種機制,採用了 XML 格式將資料儲存到裝置中。只能在同一個包內使用,不能在不同的包之間使用。
二.檔案儲存方式 /data/data/包名/files 記憶體裡面
/ context.openFileInput(name) 預設是私有的訪問許可權
三.SQLite資料庫方式:SQLite 是 Android 所帶的一個標準的資料庫, 它支援 SQL語句,它是一個輕量級的嵌入式資料庫。
四.內容提供器(Content provider)方式:主要用於應用程式之間進行資料交換,從而能夠讓其他的應用儲存或讀取此 Content Provider 的各種資料型別。
五. 網路儲存方式: 通過網路上提供給我們的儲存空間來上傳(儲存)和下載(獲取)我們儲存 在網路空間中的資料資訊。

12.Android中常見五種佈局介紹
FrameLayout(幀佈局): 從螢幕的左上角開始佈局,疊加顯示, 實際應用 播放器的暫停按鈕.
LinearLayout (線性佈局):可分為垂直佈局,水平佈局;
AbsoluteLayout(絕對佈局):用X,Y座標來指定元素的位置;
RelativeLayout(相對佈局): 相對佈局可以理解為某一個元素為參照物,來定位的佈局方式。
TableLayout(表格佈局):表格佈局類似Html裡面的Table。每一個TableLayout裡面有表格行TableRow,TableRow裡面可以具體定義每一個元素,設定他的對齊方式 android:gravity=”” 。
每一個佈局都有自己適合的方式,另外,這五個佈局元素可以相互巢狀應用,做出美觀的介面。

13.Activity的四種啟動模式?,activity與task的啟動方式有哪些,她們的含義具體說明
standard: 標準模式,一呼叫 startActivity()方法就會產生一個新的例項。
singleTop: 如果已經有一個例項位於 Activity 棧的頂部時, 就不產生新的例項, 而只是呼叫Activity 中的 newInstance()方法。如果不位於棧頂,會產生一個新的例項。
singleTask: 會在一個新的 task 中產生這個例項,以後每次呼叫都會使用這個,不會去產生 新的例項了。
singleInstance: 這個跟 singleTask 基本上是一樣, 只有一個區別: 在這個模式下的 Activity例項所處的 task 中,只能有這個 activity例項,不能有其他的例項。

14.Android 中的長度單位詳解
如果設定表示長度 、 高度等屬性時可以使用 dp 或 sp。但如果設定字型,需要使用 sp。dp 是與密度無關,sp 除了與密度無關外,還與 scale 無關。如果螢幕密度為160,這時 dp 和 sp 和 px 是一樣
的。1dp=1sp=1px,
也就是說,如果使用 dp 和 sp,系統會根據螢幕密度的變化自動進行轉換
px :表示螢幕實際的象素
in:表示英寸,是螢幕的物理尺寸。每英寸等於2.54 釐米。

15.android 析 中有哪幾種解析 l xml 的類, , , , 官方推薦哪種?以及它們的原 理和區別
DOM 解析
優點:
1.XML 樹在記憶體中完整儲存,因此可以直接修改其資料和結構.
2.可以通過該解析器隨時訪問 XML 樹中的任何一個節點.
3.DOM 解析器的 API 在使用上也相對比較簡單.
缺點:如果 XML 文件體積比較大時,將文件讀入記憶體是非常消耗系統資源的
Ø SAX 解析
優點:
SAX 對記憶體的要求比較低,因為它讓開發人員自己來決定所要處理的標籤.特別是當開發人 員只需要處理文件中所包含的部分資料時,SAX 這種擴充套件能力得到了更好的體現.
缺點:
用 SAX 方式進行 XML 解析時,需要順序執行,所以很難訪問到同一文件中的不同資料.此外,在基於該方式的解析編碼過程也相對複雜
Ø Xmlpull 解析(官方推薦使用)
android SDK 提供了 xmlpull api,xmlpull 和 sax 類似,是基於流(stream)操作檔案,然後根據節點事件回撥開發者編寫的處理程式.因為是基於流的處理,因此 xmlpull 和 sax 都比較節
約記憶體資源,不會象 dom 那樣要把所有節點以對橡樹的形式展現在記憶體中.xmlpull 比 sax 更 簡明,而且不需要掃描完整個流.

16.ListView 的 優化方案
(1),如果自定義介面卡,那麼在 getView 方法中要考慮方法傳進來的引數 contentView 是否 為 null,如果為 null 就建立 contentView 並返回,如果不為 null 則直接使用。在這個方法中,儘可能少建立 view。
(2),給 contentView 設定 tag(setTag()),傳入一個 viewHolder 物件,用於快取要顯示的數 據,可以達到影象資料非同步載入的效果
(3),如果 listview 需要顯示的 item 很多,就要考慮分頁載入。比如一共要顯示100條或者更多的時候,我們可以考慮先載入20條,等使用者拉到列表底部的時候,再去載入接下來的20 條。
(4) 快速滑動時不載入圖片
(5) 如果自定義的item中有圖片,需要處理圖片(減少圖片所佔記憶體)
1.對圖片進行邊界壓縮 2.用option類來儲存圖片大小 3.避免圖片的實時縮放,最好預先縮放到檢視大小
(6)儘量避免在listview介面卡中使用執行緒,因為執行緒是產生記憶體洩露的主要原因在於執行緒的生命週期不可控。

17.Android中intent的作用
在一個 Android 應用中,主要是由一些元件組成(Activity,Service,ContentProvider,etc.) 在這些元件之間的通訊中,由 Intent 協助完成。
Intent 負責對應用中一次操作的動作、動作涉及資料、附加資料
進行描述,Android 則根據此 Intent 的描述,負責找到對應的元件,將 Intent 傳遞給呼叫的元件,並完成元件的呼叫。Intent 在這裡起著實現呼叫者與被呼叫者之間的解耦作用。
有兩種方式,一種是顯示匹配,一種是隱示匹配;
顯示:明確的指定要跳轉的Activity,或者Service等;
隱示:隱式匹配,首先要匹配 Intent 的幾項值:Action,Category, Data/Type,Component如果填寫了 Componet 就是這就形成了顯示匹配。
1.如果你填寫了 Action, 如果有一個程式的 Manifest.xml 中的某一個 Activity 的 IntentFilter 段中定義了包含了相同的 Action 那麼這個 Intent 就與這個目標 Action 匹配, 如果這個 Filter段中沒有定義 Type,Category,那麼這個 Activity 就匹配了。但是如果手機中有兩個以上的程式匹配,那麼就會彈出一個對話可框來提示說明。
2,data/type,你可以用 Uri 來做為 data,比如 Uri uri = Uri.parse(http://www.google.com );
Intent i = new Intent(Intent.ACTION_VIEW,uri);手機的 Intent 分發過程中,會根據 http://www.google.com 的 scheme 判斷出資料型別 type手機的 Brower 則能匹配它,在 Brower 的 Manifest.xml 中的 IntenFilter中首先有ACTION_VIEW Action,也能處理 http:的 type;
3,至於分類 Category,一般不要去在 Intent 中設定它,如果你寫 Intent 的接收者,就在Manifest.xml 的 Activity 的 IntentFilter 中包含 android.category.DEFAULT,這樣所有不設定Category(Intent.addCategory(String c);)的 Intent 都會與這個 Category 匹配。
4,extras(附加資訊) ,是其它所有附加資訊的集合。使用 extras 可以為元件提供擴充套件資訊 ,比如,如果要執行“傳送電子郵件”這個動作,可以將電子郵件的標題、正文等儲存在 extras裡,傳給電子郵件傳送元件。

18.如何退出 Activity ?如何安全退出?
對於單一 Activity 的應用來說,退出很簡單,直接 finish()即可。
當然,也可以用 killProcess()和 System.exit()這樣的方法。
為了程式設計方便,最好定義一個 Activity 基類,處理這些共通問題。
1、記錄開啟的 Activity:
每開啟一個 Activity,就記錄下來。在需要退出時,關閉每一個 Activity 即可。
2、傳送特定廣播:
在需要結束應用時,傳送一個特定的廣播,每個 Activity 收到廣播後,關閉即可。

相關推薦

Android開發面試——3.常見Java基礎試題

關注finddreams部落格:http://blog.csdn.net/finddreams/article/details/44403041  因為Androd使用Java語言來程式設計的,所以我們做Android開發全面的掌握Java基礎是必須的。在面試的過程中,我

Android開發面試——2.常見Android基礎試題

1、Android四大元件是什麼?作用以及應用場景? Android 的四大元件分別是是Activity,Service,BroadcastReceiver和ContentProvider; Activity: 從字面上理解,Activity是活動的意

Android開發面試——5.常見面試官提問Android題①

關注finddreams部落格: http://blog.csdn.net/finddreams/article/details/44513579  一般的面試流程是筆試完就接著是面試了,面試時技術經理會問你一些你工作中遇到的Android方面的問題,談談你所做的專案,和

Android開發筆記(2)--Android資源訪問機制

在開發中需要引用程式資源,比如專案中assets和res目錄下的圖片、layout、values等或者需要系統內建的資源。 資源分為兩種: 第一種:res目錄下的資源(不會被編譯,但是會生成id) 第二種:assets資料夾下的資原始檔,又叫原始資原始檔(不會被

Android開發1、2周——GeoQuiz項目

安裝 android 早期 界面設計 dex devel check https 虛擬設備 GeoQuiz項目總結 通過學習Android基本概念與構成應用的基本組件,來開發一個叫GeoQuiz的應用。該應用的用途是測試用戶的地理知識。用戶單擊TRUE或FALSE按鈕來回答

#Java程式設計師福利:3分鐘知道Android開發所需要知道的知識基礎

今年的Google IO 大會上,Google宣佈Kotlin成為Android的官方語言,有興趣的可以去學習下,Java作為android的第一個語言,還是需要把打這部分知識打牢固的。(這部分內容只是當作自己的複習) 1、三大特性 Java做為面向物件的語言,他的三大特性:繼承、封裝、多型

Android開發人員不得不學習的JavaScript基礎(一)

操作符 在JavaScript中,有很多種操作符,算術操作符、賦值操作符、比較操作符以及邏輯操作符 1.1、算術操作符: +,-,*,/,除了加號(+)之外,其他都是按照四則運算大方式來進行,而加號(+)在字串中可以作為連線符來使用,這個和Java是一

Android面試之Java基礎試題

本文首發於公眾號“AntDream”,歡迎微信搜尋“AntDream”或掃描文章底部二維碼關注,和我一起每天進步一點點 Java IO流 按照資料流的方向不同可以分為:輸入流和輸出流。 按照處理資料單位不同可以分為:位元組流和字元流。 位元組流:一

Android 開發中的訊息機制 Looper基礎

Looper物件線上程中的應用及常見 RuntimeException 異常處理 一、前言            在耗時操作時開啟新執行緒,新執行緒需要開啟一個Looper物件,啟動一個訊息迴圈。主

虎牙直播 2019暑期實習生-Android開發 面試經歷(已拿offer)

一面 兩個執行緒,一個執行緒輸出”A”,一個執行緒輸出”B”,使用兩個執行緒輸出”ABABABABABAB”,要保證輸出的次序。 int c = 5;在編譯生成可執行檔案後這個變數儲存在檔案的什麼位

應屆生的Android開發面試經歷

兩個禮拜前從之前工作的地方離職了,但還是屬於實習期。來到了深圳找工作,整個過程比較坎坷。從第一天到深圳到現在廣州找到工作剛好是兩個禮拜(昨天已經上了一天班了,格外珍惜現在的這份工作哈哈)。今天剛好放假,就趁熱把面試經歷和感觸寫下來。 面試經歷

Android開發技術點2——Fragment疊加點選穿透解決方案

當Fragment棧中有多個add Fragment時,點選最上層Fragment時的空白處,如果對應的下層Fragment中存在按鈕或其他事件,那麼奇妙的事情就發生了,會穿透點選到下方的事件,不可否認

Android開發】範例2-實現放大鏡效果

利用之前學過的圖形影象繪畫技術和圖片新增特效技術,我們來實現一個Android放大鏡的簡單應用。最終效果如圖 具體實現: 用來顯示自定義的繪圖類的佈局檔案 res/layout/main.xml:<?xml version="1.0" encoding="utf-

android開發藝術探索2:binder淺析

什麼是binder? 直觀來說,binder是android中的一個類,它實現了IBinder介面。 從ipc角度來說,binder是android中的一種跨程序通訊方式,binder還可以勒戒為一種虛擬的物理裝置,該通訊方式在linux中沒有 從android f

Android 開發之Windows環境下Android Studio安裝和使用教程(圖文詳細步驟)

9.png 虛擬機 jdk版本 編寫 clip 開發平臺 集成開發 arc 電腦安裝 鑒於谷歌最新推出的Android Studio備受開發者的推崇,所以也跟著體驗一下。 一、介紹Android Studio Android Studio 是一個Android

Android開發之旅3:android架構

通過 圖集 例如 sqlit 組件 mil 大小 簡化 .html 引言 通過前面兩篇: Android 開發之旅:環境搭建及HelloWorld Android 開發之旅:HelloWorld項目的目錄結構 我們對android有了個大

Android開發之漫漫長途 X——Android序列化

view 編寫 person android中 做了 知識 序列化對象 數據庫 讀者 該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易後難的順序進行編寫該系列。該系列引用了《Android開發藝術探索》以及《深入理解Androi

android開發學習 ------- 【轉】 android中的單例模式 (詳解)

lan post tail -- and 使用 href details android開發 https://blog.csdn.net/u011418943/article/details/60139644 這篇文章 前因後果 都說出來了 ,值得學習。 htt

Android開發教程 - 使用Data Binding Android Studio不能正常生成相

比較 開發 刪除 使用 ali ida start 打開 不能 有時候新建布局文件時或者定義布局中的變量時,不能即時生成相關Binding類或方法(其實是不能正確索引),也許是IDE支持的一些BUG,不過Android Studio對Data Binding的支持問題也僅限

Android 開發:(九)Android螢幕適配經驗談

1.名詞解釋 螢幕尺寸: 也就是我們平時所說的某某手機是幾寸屏, 比如HTC one V這款手機是3.7寸的, 這裡的寸說的是英寸(inch),國際上習慣使用的單位,1inch = 2.54cm,3.7寸指的是螢幕的對角線的長度。 螢幕解析度: