一、Android有兩種方式處理線程:
比較耗時的操作放在後台服務,通過通知機制通知使用者使用的活動activity);在後台線程中處理耗時的操作
二、使用Handler
建立後台線程最友好的辦法是建立一個Handler子類的執行個體。只需一個Handler對應一個Activity。自訂的後台線程可與Handler通訊,Handler將與UI線程一起工作。和Handler通訊,需要兩個選項,message和runnable對象。
三、Message
發送Message到Handler,第一步調用obtainMessage(),從池中得到Message對象。
然後,可通過訊息佇列將Message發送給Handler,通過sendMessage…()方法族:
sendMessage() 立即發送Message到訊息佇列
sendMessageAtFrontOfQueue() 立即發送Message到隊列,而且是放在隊列的最前面
sendMessageAtTime() 設定時間,發送Message到隊列
sendMessageDelayed() 在延時若干毫秒後,發送Message到隊列
為了處理Message,Handler需要實現handleMessage(),當Message出現在隊列中時,會調用handleMessage()方法。另外,Handler可在需要時更新UI。
以下樣本示範一個進度條,每隔1秒鐘增加1/20個單位。:
java代碼:
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ProgressBar
- android:id="@+id/progress"
- style="?android:attr/progressBarStyleHorizontal"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
java代碼:
- package eoe.demo;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.widget.ProgressBar;
- public class ShowThread extends Activity {
- ProgressBar bar;
- Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- bar.incrementProgressBy(5);
- }
- };
- boolean isRunning = false;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- bar = (ProgressBar) findViewById(R.id.progress);
- }
- @Override
- protected void onStart() {
- super.onStart();
- bar.setProgress(0);
- Thread background = new Thread(new Runnable() {
- @Override
- public void run() {
- for (int i = 0; i < 20 && isRunning; i++) {
- try {
- Thread.sleep(1000);
- } catch (InterruptedException e) {
- }
- handler.sendMessage(handler.obtainMessage());
- }
- }
- });
- isRunning = true;
- background.start();
- }
- @Override
- protected void onStop() {
- super.onStop();
- isRunning = false;
- }
- }
小結:
當第一次啟動一個android程式是,android會自動建立一個稱為“main”主線程的線程。這個線程很重要,因為它負責吧時間指派到相應對控制項,其中就包括螢幕繪圖時間,它同樣是使用者與android控制項互動的線程。
Android 計時器Timer用法
Android智能手機作業系統
常用的Android指令和模擬器參數
用C#實現HTTP協議下的多線程檔案傳輸
SQL點滴之收集SQL Server線程等待資訊