服務的基本用法java
定義服務: 咱們須要先建立服務,咱們要使用就的利用一個類去繼承它,而後重寫它的幾個方法,具體的咱們看下面的代碼:多線程
咱們重寫了下面三個方法:ide
* onCreate() 服務建立的時候調用this
* onStartCommand() 每次服務啓動的時候調用線程
* onDestory() 服務銷燬的時候調用3d
注意點: 首先要明白咱們的onCreate()方法,咱們說了它只會在服務被建立的時候調用,以後你開啓服務的時候是不會再調用這個onCreate()方法了,沒啓動一次只會走 onStartCommand()方法,onDestory()是在服務被銷燬的時候調用,下面咱們再看看它的啓動。component
Intent startIntent = new Intent(this,MyService.class); // 啓動服務 startService(startIntent); // 中止服務 stopService(startIntent);
活動和服務之間的通訊blog
首先咱們的完善咱們的服務類,在咱們的服務類中添加 Binder 類,這個類會對咱們想要在服務類中作的事作一個管理:繼承
class MyService extends Service{ public MyService() { } private DownloadBinder downloadBinder = new DownloadBinder(); class DownloadBinder extends Binder{ public void startDownload(){ Log.d("DownloadBinder","startDownload"); } public int getProgress(){ Log.d("DownloadBinder","getProgress"); return 0; } } @Nullable @Override public IBinder onBind(Intent intent) { return downloadBinder; } @Override public void onCreate() { super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); } }
接着咱們看在活動裏面是怎樣和這個服務類進行一個綁定的,具體的須要注意的地方咱們都加了註釋,就不在這裏在重複,注意看註釋就能夠:生命週期
/* * * 首先咱們建立一個ServiceConnection匿名類,在裏面重寫了onServiceConnected和onServiceDisconnected方法 * 這兩個方法分別在活動和服務成功綁定的時候和解綁的時候調用 * * */ private MyService.DownloadBinder downloadBinder; private ServiceConnection connection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName componentName, IBinder iBinder) { // 綁定成以後咱們就能夠隨意的使用調用服務中的方法了 downloadBinder = (MyService.DownloadBinder) iBinder; downloadBinder.startDownload(); downloadBinder.getProgress(); } @Override public void onServiceDisconnected(ComponentName componentName) { } }; // 綁定和解綁按鈕事件來綁定和解綁 @Override public void onClick(View view) { switch (view.getId()){ // 活動綁定服務 case R.id.bind_service: // 綁定的時候使用bindService方法,參數分別是 Intent 和 connection Intent bindIntent = new Intent(this,MyService.class); bindService(bindIntent,connection,BIND_AUTO_CREATE); break; // 活動解綁服務 case R.id.unbind_service: unbindService(connection); break; default: break; } }
服務的生命週期
咱們經過下面的兩張圖說一下服務的生命週期:
Service生命週期流程圖:
咱們在經過下面的一個調用順序來解讀一下這生命週期:
服務使用的兩個小技巧
可咱們還有更簡單的方法來作這件事,利用咱們要說的 IntentService