1. 程式人生 > >筆試面試-移動開發-Android 考點小結1

筆試面試-移動開發-Android 考點小結1

1.安卓的六大布局管理器是:

LinearLayout、FrameLayout、TableLayout、RelativeLayout、AbsoluteLayout、GridLayout

2.SharedPreferences儲存檔案的路徑和副檔名是?

/data/data/package name/shared_prefs/   *.xml

SharedPreferences是Android平臺上一個輕量級的儲存類,用來儲存應用的一些常用配置,比如Activity狀態,Activity暫停時,將此activity的狀態儲存到SharedPereferences中;當Activity過載,系統回撥方法onSaveInstanceState時,再從SharedPreferences中將值取出。以xml方式來儲存 。

3.如果在Activity中對一些資源以及狀態進行儲存操作,最好是在生命週期的哪個函式中進行呢?

onPause:當系統即將開始恢復另一個Activity時被呼叫。這種方法通常用於將未儲存的變更提交到持久資料、停止動畫和其他可能消耗CPU的東西,等等。對於它所做的任何事情需要很快地完成,因為下一個Activity必須在它返回之後,才能繼續執行。

4.對於一個已經存在的 SharedPreferences 物件 setting ,想向其中存入一個字串 ”person”,”setting” 應該先呼叫什麼方法?

先呼叫edit()。

SharedPreferences是安卓中的一個輕型的資料儲存方式,它的本質是基於xml檔案儲存key-value鍵值對資料,通常適用於儲存一些配置資訊。

使用步驟

    1.通過Context上下文來過去到SharePreferences物件

    2.呼叫SharePreferences的edit()方法返回一個Editor物件

    3.在通過Editor的putXXX(key , value);方法設定資料

    4. 在通過Editor的  commit(); 方法 關閉物件

5.下列程式碼中哪個是隱式Intent的例子?

A.

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

intent.setData(Uri.parse(fileUrl));

startActivity(downloadIntent);

B.

Intent intent=new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,textMessage);
intent.setType("text/plain");
startActivity(intent);

C.

Intent intent=new Intent();
intent.setClassName(context.getPackageName(),
”com.google.sample.TestActivity”);
startActivity(intent);

D.

Intent intent=new Intetn();
intent.setComponent(new ComponentName(context.getPackageName(),
"com.google.sample.TestActivity"));
startActivity(intent);

答案B是隱式的intent啟動方式,因為隱式的啟動方式不需要通過指明明確的activity路徑,而是通過action與系統匹配合適的activity在啟動,b選項就是通過這種方式來啟動傳送簡訊的activity.

顯式啟動 是明確指定了需要啟動的Activity 或 service 的類名或包名。

隱式啟動 不明確制定需要啟動哪個Activity,而是通過設定action、data、 Category 等讓系統來匹配出合適的目標

6.What is the difference between parcelable and serializable()

Parcels are light weght serialzable .It is perfred to use parcels for marsshaling objects into byte streams

Parcelable和Serializable 倆者異同

1、Serializable在序列化的時候會產生大量的臨時變數,從而引起頻繁的GC;

2、在使用記憶體的時候,Parcelable比Serializable效能高,所以推薦使用Parcelable。

3、Parcelable不能使用在要將資料儲存在磁碟上的情況,因為Parcelable不能很好的保證資料的持續性在外界有變化的情況下。儘管Serializable效率低點,但此時還是建議使用Serializable 。

7.在設計 android 應用時,常通過()的方式來定義檢視元件。

使用XML佈局檔案定義檢視元件;使用java程式碼定義檢視元件

8.Intent可以傳遞哪些型別的資料 1. 8種基本資料型別及其陣列  2. String(String實現了 Serializable )/CharSequence例項型別的資料及其陣列  3. 實現了Parcelable的物件及其陣列  4. 實現了 Serializable 的物件及其陣列 

9.Activty和Task的啟動模式有哪些?

standard、singleTop、singleTask、singleInstance

10.Android應用中各Activity之間主要通過Intent相互傳送資訊

11.用於對單選框進行分組的方法是?

RadioGroup

1.單選框操作:單選框在Android裡面隨處可見,它是由兩部分組成的,一部分是RadioGroup,一部分是RadioButton。一個RadioGroup裡面是有多個RadioButton。每個RadioButton就是一個單選項,而控制的時候是控制RadioGroup。

3.複選框(checkBox):複選框就沒有單選框那樣有組的概念了,所以複選框的操作和單選框比起來就會比較複雜一點點,因為你要對每個複選框都進行一個事件響應。 

SeekBar是進度條

12.android中下列屬於intent的作用是:

可以實現介面間的切換,可以包含動作和動作資料,連線四大元件的紐帶

另外,

content provider:實現應用程式間的資料共享

service:是一段長的生命週期,沒有使用者介面的程式,可以保持應用在後臺執行,而不會因為切換頁面而消失

activity:處理一個應用程式整體性的工作

13.我們都知道Hanlder是執行緒與Activity通訊的橋樑,如果執行緒處理不當,你的機器就會變得越慢,那麼在Activity結束時執行緒銷燬過程中會涉及到的方法是:

onDestroy()

14.R.id.textview1(textview1為xml下TextView的id)型別是什麼?

int

15.下面退出Activity錯誤的方法是

A.onstop()

B.system.exit()

C.finish()

D.拋異常強制退出

選A。onStop是生命週期,Activity退出時候自己呼叫的,不是用來結束Activity的方法。

16.在安卓應用程式開發中,可以通過()獲得螢幕的屬性,從而取得螢幕的寬度和高度()

getMetrics

17.下列不屬於 service 生命週期的方法是 ____

onStop

由於Android Service的生命週期並不像Activity那麼複雜,它只繼承了onCreate(),onStart(),onDestroy()三個方法,當我們第一次啟動Service時,先後呼叫了onCreate(),onStart()這兩個方法,當停止Service時,則執行onDestroy()方法,需要注意的是,如果Service已經啟動了,當我們再次啟動Service時,不會在執行onCreate()方法,而是直接執行onStart()方法。

18.擁有裝置管理器許可權第三方APP可以遠端擦除手機資料

19.使用Toast提示時,關於提示時長,下面說法正確的是( ).

A.顯示時長預設只有2種設定
B.可以自定義顯示時長
C.傳入30時,提示會顯示30秒鐘
D.當自定義顯示時長時,比如傳入30,程式會丟擲異常

選A.顯示時長只有2種設定

Toast.makeText(this, str, Toast.LENGTH_LONG).show();

toast只能設定為 2s和3.5s ,其它的值都無效,API的文件雖然寫的第三個引數是時間,但是Framework裡作了重定義,限定了 2s和3.5s 這兩個值 ,對應 Toast.LENGTH_SHORT和Toast.LENGTH_LONG,實現方式在NotificationManagerService.java的scheduleTimeoutLocked()這個函式裡。

Toast的預設顯示時間有兩個,分別為Toast.LENGTH_SHORT和Toast.LENGTH_LONG

Toast只能使用short(大概2秒)和long(大概3.5秒)兩種時長,傳進去自定義數字並不會報錯,只是實際不起作用,想要更豐富的提示推薦用Dialog

20.在同一執行緒中android.Handler和android.MessaegQueue的數量對應關係是怎樣的?

N(Handler):1(MessageQueue)

在同一執行緒中肯定會呼叫一個 Loop.prepare() ,其中就生成一個 MessageQueue .

而程式碼中可以 new 出多個 Handler 傳送各自的 Message 到這個 MessageQueue 中,最後呼叫 msg.target.dispatch 中這個target來捕獲自己傳送的massge,所以明顯是 N 個 Handler 對應一個 MessageQueue.

21.在滴滴打車點選到支付寶支付,出現密碼輸入框,到此時相關的Activity會發生的生命週期回撥依次為( )

滴滴支付Activity會呼叫onPause,因為支付寶支付不會完全覆蓋滴滴支付Activity介面所以不會執行onStop。支付寶支付Activity會呼叫onCreate->onStart->onResume

支付寶支付Activity應該是Dialog。

總結:onPause->onCreate->onStart->onResume

22.下面哪一項不屬於android的動畫型別?

A.Tween
B.Alpha
C.Frame
D.Animation

答案:D

解釋:A、C很明顯是android 動畫的兩種型別,而B屬於Tween動畫的一種。

Tween(漸變動畫)補間動畫 ,慢慢過渡,設定初值和末值,並用插值器來控制過渡包含:alpha和scale

Frame(畫面轉換動畫)幀動畫,一幀一幀的,包含:translate和rotate

Animation是動畫效果,可以進行旋轉,淡入淡出,移動,縮放等

23.android通過startService的方式開啟服務,關於service生命週期的onCreate()和onStart() 說法正確的是:

當第一次啟動的時候先後呼叫 onCreate()和 onStart()方法
如果 service 已經啟動,只會執行 onStart()方法,不在執行 onCreate()方法

24.在Android中,如果需要對資料進行儲存,則可以使用( )方式

    1、使用SharedPreferences儲存資料

    2、檔案儲存資料

    3、SOLite資料庫儲存資料

    4、使用ContentProvider儲存資料

    5、網路儲存資料

25.Toast沒有焦點,Toast不可以獲得使用者輸入,Toast只能持續一段時間

26.屬於android常用的跨程序通訊工具有:

1.訪問其他應用程式的Activity

2.Content Provider 

3.廣播(Broadcast) 

4.AIDL服務

27.下列對android NDK的理解正確的是

1.NDK是一系列工具的集合
2.NDK 提供了一份穩定、功能有限的 API 標頭檔案宣告
3.使 “Java+C” 的開發方式終於轉正,成為官方支援的開發方式
4.NDK 將是 Android 平臺支援 C 開發的開端

28.Activity生命週期:

A 設定Activity的android:screenOrientation="portrait"屬性時,無法切換橫豎屏,因此不但不會重新呼叫各個生命週期方法,而且onConfigurationChanged()方法也不會執行。

B 未設定Activity的android:configChanges屬性,API上這樣說"the activity will be restarted if any of these configuration changes happen in the system.";如何配置有改變,就會重啟activity

C launchMode為singleTask的時候,通過Intent啟到一個Activity, 如果系統已經存在一個例項,系統就會將請求傳送到這個例項上,但這個時候,系統就不會再呼叫通常情況下我們處理請求資料的onCreate方法,而是呼叫onNewIntent方法

D 使用者正在操作某個Activity,這時如果其他應用程式需要記憶體。 此時的Activity是Foreground process,應該按照Empty process,Background process,Service process,Visible process順序kill,最後才是前臺程序。

29.下列關於資料持久化的描述正確的有

SQLite資料庫檔案可以儲存在SD卡中
資料持久化就是將記憶體的資料儲存到外存

andorid資料持久化的方法。    

    1.檔案IO(直接寫入SD卡檔案);

    2.SQLite資料庫;

    3.使用Preferences。 Preferences其實也屬於檔案IO;

    4.ContentProvider。作為android4大元件之一,其本身也是為了實現程序間資料共享。可能有的小夥伴會產生

疑惑,說這和持久化有毛的關係(我自己就是這樣,因為基礎不牢了。。)。資料持久化就是將記憶體中的資料模型轉化

為儲存模型。這樣就明白了把。反觀,ContentProvider,會發現其中好多方法和SQLite資料庫操作方法有的一拼,heh

到這裡 ,我們就明白了為什麼把ContentProvider也是持久化了把。但是  ContentProvider的主要目的還是為了資料共享。

30.使用SimpleAdapter作為 ListView的介面卡,行佈局中支援下列哪些元件?

TextView,CompoundButton,ImageView

使用SimpleAdapter作為介面卡時,支援三種類型的 View,而且是按照如下順序進行匹配:

  1. 繼承Checkable介面
  2.  TextView
  3.  ImageView

31.Android系統對下列哪些物件提供了資源池

A.Message提供了訊息池,有靜態方法Obtain從訊息池中取物件;

B.Thread預設不提供資源池,除非使用執行緒池ThreadPool管理;

C.AsynTask是執行緒池改造的,池裡 預設提供(核數+1)個執行緒進行併發操作,最大支援(核數  * 2 + 1)個執行緒,超過後會丟棄其他任務;

D.Looper,每個Looper建立時建立一個訊息佇列和執行緒物件,也不是資源池;