在 Android 中使用 Thread 的觀念與 C# 中的 BackgroundWorker 很像,
大致上就分成這四個成員
protected void onPreExecute()
{
}
protected void doInBackground()
{
}
protected void onProgressUpdate()
{
}
protected void onPostExecute()
{
}
AsyncTask 在 Android Developers 的文件請參考:public abstract class AsyncTask
若有用過 .Net Framework 中的 BackgroundWorker 就可以發現觀念差不多的,
官方文件可以看 MSDN 的介紹:BackgroundWorker Class
以下是一個簡單的範例,利用繼承 AsyncTask 執行 background work
若想在 Thread 中改變 Main Thread 的元件,也要特別注意範例。
首先建立一個背景作業的類別
public class UploadPhoneTask extends AsyncTask<UserPhoto, integer, boolean>
{
public void UploadPhoneTask()
{
// UserPhoto 在建構時指定也是一種做法
}
protected void onPreExecute()
{
// UI Thread
// 將 Activity 中的 Status TextView 更新為 "Uploading..."
super.onPreExecute();
}
protected void doInBackground(UserPhoto photo)
{
integer nProgress = 0;
// 進行上傳作業,並計算已上傳的百分比數
nProgress = (nUploadSize / nFullSize) * 100;
publishProgress(nProgress);
return (nUploadSize == nFullSize); // 此 return 值是給 PostExecute 收的
}
protected void onProgressUpdate(integer nProgress)
{
// UI Thread
txtStatus.Text = "Uploading... " + nProgress.ToString() + " %";
}
protected void onPostExecute(boolean bSuccess)
{
// UI Thread
if(bSuccess)
{
// 上傳成功
}
else
{
// 上傳失敗
}
}
}
使用 UploadPhotoTask 的方法如下
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate();
UploadPhotoTask userTask = new UploadPhotoTask();
// 取得用戶要上傳的圖片並建構 UserPhoto 物件
userTask.execute(UserPhoto);
}
}
使用上較 C# 的 BackgroundWorker 麻煩,但管理起來較清晰。
沒有留言:
張貼留言