天天看點

android finish後不能ondestroy_Android面試基礎(一)

android finish後不能ondestroy_Android面試基礎(一)

一.四大元件是什麼

Android 四大元件是Activity、Service、BroadcastReceive、ContentProvider

Activity

直接與使用者互動的元件

周期:onCreate=>onStart=>onResume=>onPaused=>onStop=>onDestroy

啟動模式: standard、singleTop、singleTask、singleInstance

1. 橫豎屏切換生命周期不重新開機 設定android:configChanges

2.資料恢複

onSaveInstanceState-->onStop-->

onStart-->onRestoreInstanceState-->

Service

服務是運作在背景的元件,無需與使用者進行互動

啟動方式:

1.StartService: onCreate=>onStartCommand=>onDestroy

啟動它的元件無關聯,銷毀需調用stopSelf或stopService

2.bindService: onCreate=>onBind=>onUnbind=>onDestroy

與啟動元件綁定,所有綁定元件銷毀後執行完unBind才會銷毀

注:它本身還運作在主線程中,是以耗時邏輯仍需工作線程去完成

BroadcastReceive

廣播用來在應用程式之間傳播資訊的機制

動态注冊:registerReceive 注冊元件銷毀後,廣播失效 unRegisterReceiver解除

靜态注冊:manifest中注冊 安裝時就會被系統解析一直起作用

普通廣播

通過Context.sendBroadcast()方法來發送。它是完全異步的,所有的receivers接收器的執行順序不确定 這種方式效率更高

有序廣播

通過Context.sendOrderedBroadcast來發送。所有的receiver依次執行,使用android:priority屬性設定優先級,優先級高的先收到該廣播并且可以丢棄該廣播,使該廣播不再往下發送

ContentProvider

為應用提供資料共享,不用關注儲存方式

ContentProvider(内容提供者)

ContentResolver(内容解析者)

ContentObserver(内容觀察者)

1、建立自己的資料清單;

2、自定義ContentProvider實作相關的抽象方法;

3、在AndroidManifest中聲明provider以及定義相關通路權限;

4 、通過ContentResolver根據URI進行增删改查;

二.Activity之間的通信方式

1.Intent 2.借助靜态資料實作 3.借助全局變量來實作/Application 4.通過Service 5.借助外部存儲

a.SharedPreference SharedPreference是存放在data/data/應用包名/shared_prefs目錄下字尾為.xml的檔案

b.SQLite SQLite是存放在data/data/應用包名/databases目錄下的字尾為.db3的檔案

c.File

三.Activity各種情況下的生命周期

正常

正常啟動: onCreate=>onStart=>onResume

傳回鍵退出:onPause=>onStop=>onDestroy

按home鍵

正常啟動: onCreate=>onStart=>onResume

按home: onPause=>onStop

正常啟動: onRestart=>onStart=>onResume

橫豎屏切換

正常啟動: onCreate=>onStart=>onResume

橫豎屏切換:onPause=>onStop=>onDestroy=>onCreate=>onStart=>onResume

設定configChanges

正常啟動: onCreate=>onStart=>onResume

橫豎屏切換:onConfigurationChanged