android系統是一座房子,有一個正常運行的公司進駐這所座子
cpu是這家公司的老闆
進程是公司中的辦公室,辦公室不幹活
線程是辦公室中的員工,幹活的永遠是員工
一間辦公室中可有多個員工,並且辦公室有個活動對外的人員叫主線程
公司肯定會有很多職能部門
activity service provider brocastrecive 都是職能部門
現在公司有個客戶有個需求,需要幾個部門合作才能完成,於是公司的業務人員APP就跟老闆申請了一間辦公室來完成客戶需求工作
當然,爲了工作更加有效率,有的部門可能需要單獨的辦公室也是可以的
以上就是對android中這幾個概念的理解,總結一下:
android系統是多進程的,但不是越多越好,進程開得太多,系統會卡死
每啓動一個app,系統都會爲它開闢一個新進程,一般的,這個app中的四大組件都是運行在同一進程,且同一線程中
如果在mainifest.xml文件中配置組件的process (:XXX 爲系統全局可共用進程 .XXX 爲當前APP可共用進程),那麼該組件就可以獨立運行在單獨的進程中
所以,就出現了aidl技術,進程之間的通信
aidl是一種接口描述語言,也可理解爲java進程間的接口(interface)
直接編寫一個java接口類,並將後綴後改爲.aidl後編譯,在gen目錄下就會生成一個java類,並且這個類中有一個抽象類,在服務端實現這個抽象類,並通過onBind方法返回給客戶端,就可以在客戶端進程中用這個對象調用服務端進程中的方法,實現通信
由止可以看出aidl技術其實與綁定服務用法是差不多的,不同就是綁定服務是通過java文件來定義那個接口,而aidl是通過aidl文件來定義這個接口,並且經過測試,同一進程間當然也是可以用aidl,也就是說,綁定服務可以被aidl取代
說下service:
綁定服務,通過bundServcie方法調用,onBundService停用,並且當調用者銷燬,比如一個activity中調用的,當這個aictivity銷燬了,那麼這個service也就銷燬了
全局服務,通過startService方法調用,stopService停用,並且當調用者銷燬,此服務還在運行,只有當退出app時,此服務才銷燬,當然,可以通過守護進程技術將些服務保持運行
以上只是個人理解,如有錯誤之處,還請幫忙指點一二