天天看點

Android 開發四大元件之Service

1.簡介

  • 定義

    Service,是 Android 四大元件之一, 屬于 計算型元件

  • 作用

    提供需在背景長期運作的服務。如:複雜計算、音樂播放、下載下傳等。

  • 特點

    無使用者界面、在背景運作、生命周期長。

2. 生命周期

Android 開發四大元件之Service
  1. 通過 start 方式開啟服務

    onCreate() – > onStartCommand() – > onDestory()

    注意:如果服務已經開啟,不會重複回調 onCreate() 方法,如果再次調用context.startService() 方法,service 而是會調用 onStart() 或者onStartCommand() 方法。停止服務需要調用 context.stopService() 方法,服務停止的時候回調 onDestory 被銷毀。

    特點:一旦服務開啟就跟調用者(開啟者)沒有任何關系了。開啟者退出了,服務還在背景長期的運作,開啟者不能調用服務裡面的方法。

  2. 采用 bind 的方式開啟服務

    onCreate() – > onBind() --> onUnbind() – > onDestory()

    注意:綁定服務不會調用 onStart() 或者onStartCommand()方法

    特點:bind 的方式開啟服務,綁定服務,調用者挂了,服務也會跟着挂掉。綁定者可以調用服務裡面的方法。

3. 類型

本地服務

調用者和 service 在同一個程序裡,是以運作在主程序的 main 線程中。是以不能進行耗時操作,可以采用在 service 裡面建立一個 Thread 來執行任務。service 影響的是程序的生命周期,讨論與 Thread 的差別沒有意義。

任何 Activity 都可以控制同一 Service,而系統也隻會建立一個對應 Service 的執行個體。

學習位址

遠端服務

調用者和 service 不在同一個程序中,service 在單獨的程序中的 main 線程,是一種跨程序通信方式。學習位址

4. IntentService

IntentService 是 Service 的子類,比普通的 Service 增加了額外的功能。先看Service本身存在兩個問題:

  • Service 不會專門啟動一條單獨的程序,Service 與它所在應用位于同一個程序中;
  • Service也不是專門一條新線程,是以不應該在Service中直接處理耗時的任務;

特征 :

  • 會建立獨立的 worker 線程來處理所有的Intent請求;
  • 會建立獨立的 worker 線程來處理 onHandleIntent() 方法實作的代碼,無需處理多線程問題;
  • 所有請求處理完成後,IntentService會自動停止,無需調用stopSelf()方法停止Service;
  • 為 Service 的 onBind() 提供預設實作,傳回null;
  • 為Service 的 onStartCommand 提供預設實作,将請求 Intent 添加到隊列中;

    學習位址