編輯:關於Android編程
原文地址:http://android.xsoftlab.net/training/run-background-service/index.html
除非特別指定,否則所有的操作都是在UI線程中執行的。不過這會引起問題,因為長時間的耗時操作會妨礙UI線程的運行。這會惹惱用戶,並可能會引起系統錯誤。為了避免這樣的情況出現,Android為此提供了一些類,可以使這些耗時操作放在單獨的線程中執行。這裡用到最多的就是IntentService了。
這節課主要學習如何實現IntentService,以及如何向它發送工作請求,以及如何響應它的執行結果。
IntentService提供了一個非常簡單的構造方法。IntentService允許執行耗時操作,而又不會引起UI線程的阻塞。同樣的,IntentService還不受UI生命周期的影響。所以它可以在一個單獨的環境中持續運行。
不過IntentService也是有限制的,列舉如下:
它不可以與UI線程直接交互。為了將結果遞送到UI,不得不采用廣播的形式將結果發送出去。 工作請求是按順序執行的。如果目前已經有一個操作在IntentService中執行,那麼再往其中發送操作請求的話,這些操作請求都將會等待,直至第一個操作完成。 IntentService中的操作不可以被中斷。不管怎樣,大多數情況下,IntentService是執行後台操作的首選方式。
這節課主要學習如何實現IntentService,以及如何創建請求回調方法onHandleIntent(),最後我們還會學習如何在清單文件中聲明該IntentService。
首先需要創建一個類並繼承IntentService,然後重寫它的onHandleIntent()方法:
public class RSSPullService extends IntentService { @Override protected void onHandleIntent(Intent workIntent) { // Gets data from the incoming Intent String dataString = workIntent.getDataString(); ... // Do work here, based on the contents of dataString ... } }
這裡要注意普通Service的那些回調方法,比如onStartCommand()方法,它會被IntentService自動調用,所以在IntentService內部最好不要重寫這些方法。
IntentService同樣需要在清單文件中定義。它的定義方式與普通Service是一樣的。
......
其中android:name屬性說明了IntentService的類名。
這裡要注意:Service標簽內並沒有包含Intent Filter。因為其它組件是通過顯示Intent發送工作請求的。所以這裡不需要定義Intent Filter。這也意味著只有相關組件內的APP或者擁有相同用戶ID的程序才可以訪問該服務。
現在我們已經定義好了一個IntentService類,接下來就可以通過Intent對象向其發送工作請求了。關於如何構建相關對象以及如何發送請求到IntentService的相關內容將會在下節課學習。
安卓使用ES文件浏覽器看電腦上的共享媒體文件。手機多大多很難大過電腦,有時手機都裝不下一步藍光的高清電影,可是我們要看,那怎麼辦?現在小編教你使用ES浏覽器
有人在群裡問他實現的倒計時在ListView中很卡,有沒有好的方案,我就閒來沒事,實現了一下,供參考 package com.microchange;impor
Github地址:https://github.com/coder-pig/AndroidStudio-Eat-Guide1.必須記住的快捷鍵:Ctrl+Shift+A
本文主要講解MVP開發模式以及具體實例。一、簡介MVP(Model View Presenter)模式是著名的MVC(Model View Controller)模式的一