Service學習筆記

2021-08-20 16:53:55 字數 2663 閱讀 4076

四個手動呼叫的方法

手動呼叫的方法

作用startservice( )

啟動服務

stopservice( )

關閉服務

bindservice( )

繫結服務

unbindservice( )

解綁服務

五個內部自動呼叫的方法

內部自動呼叫的方法

作用oncreat( )

建立服務

onstartcommand( )

開始服務

ondestory( )

銷毀服務

onbind( ) 

繫結服務

onunbind( )

解綁服務

其中:1. oncreat( )和onstartcommand( )的區別:oncreat( )方法實在服務的第一次建立的時候呼叫,而onstartcommand( )方法則再每次啟動服務的時候均會呼叫。但是每個服務只會存在乙個例項。

2. 服務啟動了之後會一直保持執行狀態,直到stopservice( )或者stopself( )方法被呼叫。

3. 當呼叫了startservice( )之後再去呼叫stopservice( ),這是服務中的ondestory( )方法將會被呼叫,表示服務已經被銷毀。同理bindservice( )方法和unbindservice( )方法類似,但是如果其即呼叫了startservice( )方法有呼叫了bindservice( )方法,那麼該服務必須滿足stopservice( )和unbindservice( )兩種條件ondestory( )方法才被執行。

如果自定義乙個myservice來繼承service的話,可以看到onbind( )方法是service中唯一的乙個抽象方法:

public class myservice extends service 

}

在重寫服務時,一般我們會重寫四個方法:

1)oncreate():建立服務時呼叫

2)onstartcommand():每次啟動服務時都會呼叫此方法

3)ondestroy():服務銷毀的時候呼叫

4)onbind():服務的唯一抽象方法,子類中必須實現的方法

以上是簡單的重寫乙個服務而已,如果想要獲取到服務中的資訊,需要使用bindservice(),此方法的構造方法如下所示:

public boolean bindservice(intent service, serviceconnection conn,

int flags)

下面是繫結服務時乙個簡單的例子:

public class myservice extends service 

private downloadbinder downloadbinder = new downloadbinder();

class downloadbinder extends binder

public int getprogress()

}@override

public void oncreate()

@override

public int onstartcommand(intent intent, int flags, int startid)

@override

public void ondestroy()

@override

public ibinder onbind(intent intent)

}

在主程式中繫結此服務:

private serviceconnection connection = new serviceconnection() 

@override

public void onservicedisconnected(componentname name)

};//繫結此服務,並且繫結後自動建立

intent intent = new intent(mainactivity.this, myservice.class);

bindservice(intent, connection, bind_auto_create);

//取消繫結此服務

unbindservice(connection);

可以看到當我們在主程式中對服務進行繫結之後,便可以通過此方法獲取到服務中的進度之類的資訊。需要注意的是,任何乙個服務,不僅可以在主程式中進行繫結,在應用程式的任何活動之內,都可以對其進行繫結操作。

但是需要注意的是,服務啟動了之後就會一直保持執行狀態,知道我們呼叫了stopservice()或者stopself()方法,雖然每次呼叫都會執行一次startcommand()但是,每個服務僅僅存在乙個例項,無論呼叫多少次的startcommand()方法,只需要呼叫一次stopservice()或者stopself()方法即可。

3.使用intentservice

上面的服務之類的操作都是在主線程中進行,如果處理一些耗時的操作則容易出現anr,因此使用intentservice,即在服務中開啟乙個子執行緒來進行一些耗時的操作。

但是intentservice是使用工作執行緒對所有的請求進行逐一處理,只需要實現onhandintent即可。

Service學習筆記 一

學習service的,必須提到service的兩種啟動方式,下面附上生命週期。通過startservice啟動後,service會一直無限期執行下去,只有外部呼叫了stopservice 或stopself 方法時,該service才會停止執行並銷毀。bindservice啟動服務特點 1.bind...

Android學習筆記九 Service

一 service是什麼 二 service的生命週期方法 在定義service子類時,需要重寫以下方法 內部自動呼叫的方法 作用oncreat 建立服務 onstartcommand 開始服務 ondestroy 銷毀服務 onbind 繫結服務 onunbind 解綁服務 在其他地方,建立服務 ...

Android學習筆記 Service初步

1 service是什麼 是乙個應用程式元件 沒有圖形化介面 通常處理一些耗時較長的操作 可以是使用service更新contnetprovider.傳送intnet以及啟動系統的通知等等 2 service不是什麼 不是乙個單獨的程序 不是乙個執行緒 3 service生命週期 4 啟動和停止se...