標籤:
基礎4 Android基礎
1. Activity與Fragment的生命週期。
Activity生命週期
開啟應用 onCreate()->onStart()->onResume
按BACK鍵 onPause()->onStop()->onDestory()
按HOME鍵 onPause()->onStop()
再次啟動 onRestart()->onStart()->onResume()
Fragment的生命週期
切換到該Fragment onAttach() onCreate() onCreateView() onActivityCreated() onStart() onResume()
螢幕滅掉 onPause() onSaveInstanceState() onStop()
螢幕解鎖 onStart() onResume()
切換到其他Fragment onPause() onStop() onDestroyView()
切換回本身的Fragment onCreateView() onActivityCreated() onStart() onResume()
回到案頭 onPause() onSaveInstanceState() onStop()
回到應用 onStart() onResume()
退出應用 onPause() onStop() onDestroyView() onDestroy() onDetach()
2. Acitivty的四中啟動模式與特點。
當應用運行起來後就會開啟一條線程,線程中會運行一個任務棧,當Activity執行個體建立後就會放入任務棧中 Activity啟動模式的設定在AndroidManifest.xml檔案中,通過配置Activity的屬性android:launchMode=""設定
Standard模式(預設) 只要你建立了Activity執行個體,一旦啟用該Activity,則會向任務棧中加入新建立的執行個體,退出Activity則會在任務棧中銷毀該執行個體
SingleTop模式 考慮當前要啟用的Activity執行個體在任務棧中是否正處於棧頂,如果處於棧頂則無需重新建立新的執行個體,會重用已存在的執行個體,否則會在任務棧中建立新的執行個體
SingleTask模式 如果任務棧中存在該模式的Activity執行個體,則把棧中該執行個體以上的Activity執行個體全部移除,調用該執行個體的newInstance()方法重用該Activity,使該執行個體處於棧頂位置,否則就重新建立一個新的Activity執行個體
SingleInstance模式 當該模式Activity執行個體在任務棧中建立後,只要該執行個體還在任務棧中,即只要啟用的是該類型的Activity,都會通過調用執行個體的newInstance()方法重用該Activity,
此時使用的都是同一個Activity執行個體,它都會處於任務棧的棧頂。 此模式一般用於載入較慢的,比較耗效能且不需要每次都重新建立的Activity
3. Activity緩衝方法。
onSaveInstanceState() 和 onRestoreInstanceState()不屬於Activity的生命週期,只有意外銷毀一個Activity時才被調用,
如記憶體不足,按下了HOME鍵(註:按下BACK鍵則是主動銷毀一個Activity,這兩個方法不會被調用)。當需要改變螢幕方向時,也可以用這兩個方法來暫存一些資料。
下面百度地圖應用中的例子,就用到了這兩種方法,用來儲存和恢複地圖的視圖。
@Overrideprotected void onSaveInstanceState(Bundle outState) { cPoint = mapView.getMapCenter(); //得到當前MapView的中心點。 outState.putInt("lat", cPoint.getLatitudeE6()); //暫存在outState中 outState.putInt("lon", cPoint.getLongitudeE6()); super.onSaveInstanceState(outState);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) { int lat = savedInstanceState.getInt("lat"); //從儲存的資料中恢複 int lon = savedInstanceState.getInt("lon"); cPoint = new GeoPoint(lat, lon); super.onRestoreInstanceState(savedInstanceState);}
4. Service的生命週期,兩種啟動方法,有什麼區別。
startService 訪問者退出 Service仍然允許 onCreate onStartCommand onDestroy
bindService 訪問者退出 Service終止onCreate onBind onUnbind onDestroy
5. 怎麼保證service不被殺死。
1 onStartCommand方法,返回START_STICKY
2 提升service優先順序 android:priority = "1000"
3 提升service進程優先順序
4 onDestroy方法裡重啟service
6. 廣播的兩種註冊方法,有什麼區別。
1.在AndroidManifest.xml檔案中註冊。
好處:一旦應用程式被安裝到手機裡,BroadCast Receiver就開始生效。 無論應用程式進程是否運行,運用程式是否在開啟狀態下都可以接受到廣播事件
<receiver android:name=".receiver.SMSReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter> </receiver>
2.通過代碼的方式註冊廣播 好處:一旦運用程式停止,廣播也跟著停止
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
filter.setPriority(1000);
LockScreenReceiver myReceiver = new LockScreenReceiver();
registerReceiver(myReceiver, filter);
7. Intent的使用方法,可以傳遞哪些資料類型。
putExtra()
基礎資料型別 (Elementary Data Type) boolean byte char short int long float double
String CharSequence Parcelable Serializable Bundle 數組 集合
8. ContentProvider使用方法。
增刪改查
ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://media/internal/images");//添加一條記錄ContentValues values = new ContentValues();values.put("name", "linjiqin");values.put("age", 25);resolver.insert(uri, values); //擷取person表中所有記錄Cursor cursor = resolver.query(uri, null, null, null, null);while(cursor.moveToNext()){ }//把id為1的記錄的name欄位值更改新為zhangsanContentValues updateValues = new ContentValues();updateValues.put("name", "zhangsan");Uri updateIdUri = ContentUris.withAppendedId(uri, 2);resolver.update(updateIdUri, updateValues, null, null);//刪除id為2的記錄Uri deleteIdUri = ContentUris.withAppendedId(uri, 2);resolver.delete(deleteIdUri, null, null);
9. Thread、AsycTask、IntentService的使用情境與特點。
10. 五種布局: FrameLayout 、 LinearLayout 、 AbsoluteLayout 、 RelativeLayout 、 TableLayout 各自特點及繪製效率對比。
11. Android的資料存放區形式。
12. Sqlite的基本操作。
13. Android中的MVC模式。
14. Merge、ViewStub的作用。
15. Json有什麼優劣勢。
16. 動畫有哪兩類,各有什麼特點?
17. Handler、Loop訊息佇列模型,各部分的作用。
18. 怎樣退出終止App。
19. Asset目錄與res目錄的區別。
20. Android怎麼加速啟動Activity。
21. Android記憶體最佳化方法:ListView最佳化,及時關閉資源,圖片緩衝等等。
22. Android中弱引用與軟引用的應用情境。
23. Bitmap的四中屬性,與每種屬性隊形的大小。
24. View與View Group分類。自訂View過程:onMeasure()、onLayout()、onDraw()。
25. Touch事件分發機制。
26. Android長串連,怎麼處理心跳機制。
27. Zygote的啟動過程。
28. Android IPC:Binder原理。
29. 你用過什麼架構,是否看過源碼,是否知道底層原理。
30. Android5.0、6.0新特性。
Android的話,多是一些項目中的實踐,使用多了,自然就知道了,還有就是多逛逛一些名人的部落格,書上能講到的東西不多。另外android底層的東西,有時間的話可以多瞭解一下,加分項。
推薦書籍:《瘋狂android講義》《深入理解android》
基礎4 Android基礎