Android四大組件之Service淺見

來源:互聯網
上載者:User

Service 是Android四大組件之一,可以在不顯示介面的情況下在後台運行。還有一個作用是通過AIDL來實現處理序間通訊。

 

Service的啟動方式

Service的啟動方式有兩種,startService()與bindService()

startService():onCreate->onStartCommand(舊版本為onStart),結束通過stopService(),回調onDestroy

如果調用startService()方法前服務已經被建立,多次調用startService()方法並不會導致多次建立服務,但會導致多次調用onStartCommand()方法

 

bindService():onCreate->onBind,結束通過unBindService(),回調onUnbind->onDestroy.

 

第一種方式啟動Service,Service與調用者沒有關聯,調用者,比如Activity,finish掉後,Service還在運行。而bind就是兩者綁定到一起,調用者結束了,Service也會結束。當然,調用者也可以通過unbindService()直接解除綁定。

 

 

Service與Thread

很多人搞不懂Service和Thread的區別,這裡我談談我的理解。Service大家可以理解成沒有介面的Activity,他運行在主線程(UI線程)中,而不是另起一個線程,所以說為什麼不能在onStart(),onCreate()裡進行耗時的操作,因為會阻塞主線程,甚至會引起ANR異常。通常在Service裡進行耗時操作時都需要在Service中另起一個線程。同時,Service又分為local Service 和 remote Service ,分別為本地服務和遠程服務。

 

本地服務:在當前進程的主線程中,即與Client在同一進程,同時他是在運行UI線程上

遠程服務:另起一個進程,注意,是進程,不是線程。運行在該進程的主線程上。常用於處理序間通訊。

可以通過添加android:process="remote"代碼將Service設定成remote Service(預設是local)

 

至於Thread就不用介紹了,所以大家可以看出來Service從某個層面上說,與Thread半毛錢關係沒有。

那麼為什麼要引進local Service呢,為什麼不直接使用Thread呢?我的理解是local Service能夠更加方便地對Thread進行管理和維護,比如如果你在當前Activity start一個子線程,當你離開這個Activity時,你將失去這個子線程的引用。而無論你Activity如何跳轉,Service都可以安然地對子線程進行維護。

 

 

Service通訊

Service 通過IBinder進行通訊,首先建立內部類MyBinder繼承實現IBinder介面的Binder類。重寫onBind()方法返回MyBinder執行個體。

  MyService    MyBinder binder =  MyBinder          System.out.println("onbind"         "Create" (!1000++ "unbind"          .quit = "destroy"

 在調用Service的Activity中建立ServiceConnection執行個體,重寫onServiceConnected,擷取IBinder對象

 ServiceConnection conn =              System.out.println("discouted"             binder =

調用bindService(Intent service, ServiceConnection conn, int flags)時傳入第二個參數就是ServiceConnection執行個體。獲得IBinder對象後就可以調用裡面的方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.