用IntentService 與ResultReceiver連線web service
IntentService 與ResultReceiver的搭配可以很方便地處理簡單的非同步問題,用這種方法可以避免啟動一大堆錯綜複雜且難以管理的執行緒。
舉個例子,你想從web service取一些資料:
1. 呼叫startService。
2. service中開始操作處理,並且通過訊息告訴activity處理已經開始。
3. activity處理訊息並且顯示進度條
4. service完成處理並且返回給activity需要的資料。
5. activity處理資料。
6. service通過訊息告訴activity處理完成,並且kill掉自己。
7. activity取得訊息並且結束掉進度條。
一、先介紹一下IntentService
IntentService繼承自Service,從原始碼上看,它是Service、HandlerThread和Handler的強強聯合。具有任務佇列,順序處理,
當處理完全部任務後,它會自動kill掉自己,完全不用我們操心。大家有興趣可以去查一下資料。
二、ResultReceiver
這個是用來接收返回資訊的類,來自 android.os.ResultReceiver。
三、使用方法:
public class HomeActivity extends Activity implements ResultReceiver {
public void onCreate(Bundle savedInstanceState) {
...
final Intent intent = new Intent(Intent.ACTION_SYNC, null, this, QueryService.class);
intent.putExtra("receiver", this);
intent.putExtra("command", "query");
startService(intent);
}
public void onReceiveResult(int resultCode, Bundle resultData) {
switch (resultCode) {
case RUNNING:
//show progress
break;
case FINISHED:
List results = resultData.getParcelableList("results");
// do something interesting
// hide progress
break;
case ERROR:
// handle the error;
break;
}
}
service程式碼:
public class QueryService extends IntentService {
protected void onHandleIntent(Intent intent) {
final ResultReceiver receiver = intent.getParcelableExtra("receiver");
String command = intent.getStringExtra("command");
Bundle b = new Bundle();
if(command.equals("query") {
receiver.send(STATUS_RUNNING, Bundle.EMPTY);
try {
// get some data or something
b.putParcelableArrayList("results", results);
receiver.send(STATUS_FINISHED, b)
} catch(Exception e) {
b.putString(Intent.EXTRA_TEXT, e.toString());
receiver.send(STATUS_ERROR, b);
}
}
this.stopSelf();
}
}
相關文章
- Android IntentService完全解析 當Service遇到HandlerAndroidIntent
- 什麼是web service?- SOAP Web Service & Restful Web ServiceWebREST
- Android四大元件之Service,以及IntentServiceAndroid元件Intent
- Android Service和IntentService知識點詳細總結AndroidIntent
- Oracle(+)連線與Join連線Oracle
- 左連線與右連線
- 長連線與短連線
- ORACLE 半連線與反連線Oracle
- 外連線與連線順序
- web service實現原理與非同步呼叫Web非同步
- xml web serviceXMLWeb
- Web Service 教程Web
- Http持久連線與HttpClient連線池HTTPclient
- IntentServiceIntent
- Azure web 連線到Azure databaseWebDatabase
- .NET 基礎拾遺(7):Web Service 的開發與應用基礎Web
- 連結檔案 (硬連線 與 符號連線)符號
- 關於面向連線與面向無連線
- linux 的軟連線與硬連線Linux
- web離線應用Web
- RESTful Web Service(續)RESTWeb
- Web Service 基礎Web
- Web Service入門Web
- tnsname service listener 對qlsql develop連線遠端影響SQLdev
- web服務中連線池用法Web
- Java Web開發相關連線JavaWeb
- IntentService小酌Intent
- 用c#建立與資料庫的連線 c#連sqlserverC#資料庫SQLServer
- RMAN連線與oracle連線模式的關係Oracle模式
- 【轉載】通訊長連線與短連線
- 小島秀夫:MEME與連線
- apache 與jboss連線Apache
- 用xmanager 連線aixAI
- oracle 專用伺服器連線與共享伺服器連線的概念和區別Oracle伺服器
- 轉載:內連線與外連線的區別
- 【JDBC】使用OracleDataSource建立連線池用於連線OracleJDBCOracle
- 教你入門Web ServiceWeb
- Spring Web Service教程SpringWeb