Android Service—建立一個被啟動類型的服務

來源:互聯網
上載者:User

一個啟動類型的服務是另一個組件通過調用startService()方法,產生一個調用服務的onStartCommand()方法而啟動的服務。

當一個服務被啟動時,它有一個獨立與啟動它的組件的生命週期,並且這個服務能夠無限期的在後台運行,即使啟動它的組件被銷毀了。因此這個服務應該在工作結束時通過調用stopSelf()方法來終止自己,或者另一個組件通過調用stopService()方法也能終止這個服務。

像Activity這樣的應用程式組件能夠通過調用startService()方法來啟動服務,並且給指定的服務傳遞一個Intent對象,同時包含一些服務所使用的資料。服務在onStartCommand()方法中接受這個Intent對象。

例如,假設一個Activity需要把一些資料儲存到線上資料庫中。這個Activity就能啟動一個服務,並且把要儲存的資料通過一個Intent對象傳遞給startService()方法。這個服務在onStartCommand()方法中接受這個Intent對象,串連到互連網,並且執行資料庫事務。當事務結束,這個服務就自己終止並銷毀。

警告:服務運行在與聲明它的應用程式相同的進程中,並且是在應用程式的主線程中。預設情況下,如果你的服務要執行密集或阻塞操作,而使用者又要跟同一個應用程式的一個Activity進行互動,那麼這個服務就會降低Activity的效能。要避免影響應用程式的效能,你應該在服務的內部啟動一個新的線程。

通常,你能夠繼承兩個類來建立被啟動類型的服務:

Service

這是所有服務的基類。當你繼承這個類時,重要的是你要給所有的服務工作建立一個新的線程,因為服務要使用你的應用程式的主線程,預設情況可能降低應用程式正在啟動並執行Activity的效能。

IntentService

這是一個Service類的子類,它使用背景工作執行緒來依次處理所有的啟動請求,如果你不想要服務同時處理多個請求,那麼這是最好的選擇。需要你做的所有工作就是實現onHandleIntent()方法,它接受每個啟動請求的Intent對象,以便完成後台工作。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.