標籤:
一、Android有四大組件:Activity、Service、BroadcastReceiver、ContentProvider。
1、Activity
通過startActivity建立新的Activity,通過Intent將資訊傳遞到新從Activity中。
如果需要傳回值,則使用startActivityForResult,並重寫onActivityResult方法。在被調用的Activity中,使用setResult將資訊傳遞迴調用處。
2、Service
使用startService、bindService、unbindService、stopService對Service進行操作。通過Intent傳遞資訊。
這4個方法調用順序和注意事項,可以查看日誌 Android Service 和 Android Service執行unbind後再次執行bind的問題
3、BroadcastReceiver
使用sendBroadcast、registerReceiver、unregisterReceiver。
register是android.content.ContextWrapper中的方法,而Activity和Service都繼承自ContextWrapper,所以Activity和Service都可以註冊Receiver。
註冊Receiver的方式有兩種:可以不使用registerReceiver和unregisterReceiver,使用Manifest.xml中配置的方式註冊Receiver,這種註冊方式稱為靜態註冊,Activity聲明周期結束後,BroadcastReceiver依然可以接收到發給它的資訊;如果使用registerReceiver和unregisterReceiver,就是動態註冊,BroadcastReceiver的聲明周期跟隨Activity或Service的聲明周期。
當這個Activity被銷毀的時候,如果沒有執行unregisterReceiver,系統會提示是否忘記取消註冊。
sendOrderedBroadcast可以發送有序廣播,每個廣播在IntentFilter中設定priority屬性,通過優先順序保證Broadcast的執行順序,priority值(-1000到1000)越大優先順序越高。
4、ContentProvider
目前只是通過eoe視頻學習了調用其他組件提供資訊的使用方法。
二、Intent
Intent是組件間傳遞資訊的方式。
這段時間的學習過程中,大多數時間都在使用Intent(Context, <Class ?>)方法構造Intent對象,這種構造對象的方式可以精確的調用Activity、Service、Broadcast等組件。但是缺點也很明顯,比如,不能批量的下發Broadcast(繼承或許可以實現,需要實踐來驗證一下)。對於這樣的需求,可以通過Intent(String action)來實現,在Manifest中定義IntentFilter,多個Broadcast對應相同Action的IntentFilter,就可以實現批量發送的功能。
Android 四大組件和Intent