AsyncTask 處理複雜多個任務。
好長時間沒回到部落格寫東西了,今天寫點吧。言回正傳。
AsyncTask 處理複雜邏輯,容易讓人想成多個執行緒併發其實不是。上程式碼
package com.example.helloproguard;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.AsyncTask.Status;
import android.os.Bundle;
import android.util.Log;
public class TestAsyncTask extends Activity
{
final String TAG = TestAsyncTask.class.getSimpleName();
MyTask task;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (task != null && task.getStatus() == Status.RUNNING)
task.cancel(true);
task = new MyTask();
task.execute();
}
class MyTask extends AsyncTask<Integer, Integer, String>
{
@Override
protected void onPreExecute()
{
super.onPreExecute();
Log.e(TAG, "執行順序---:" + "onPreExecute()");
}
@Override
protected String doInBackground(Integer... params)
{
Log.e(TAG, "執行順序---:" + "doInBackground(Integer... params)");
int code = doSomething();
if (code == 0) {
int code1 = method1();
if (code1 == 0) {
int code2 = method2();
if (code2 == 0) {
int code3 = method3();
if (code3 == 0) {
Log.e(TAG, "最後一個方法成功---:method3();" + "doInBackground(Integer... params)");
} else {
publishProgress(3);
}
} else {
publishProgress(2);
}
} else {
publishProgress(1);
}
} else {
publishProgress(1000);
}
return null;
}
@Override
protected void onPostExecute(String result)
{
super.onPostExecute(result);
Log.e(TAG, "執行順序---:" + "onPostExecute(String result)");
}
@Override
protected void onProgressUpdate(Integer... values)
{
super.onProgressUpdate(values);
Log.e(TAG, "執行順序---:" + "onProgressUpdate(Integer... values)");
if (values[0] == 1) {
Log.d(TAG, "處理--method1:" + "onProgressUpdate(Integer... values)");
} else if (values[0] == 2) {
Log.d(TAG, "處理--method2:" + "onProgressUpdate(Integer... values)");
} else if (values[0] == 3) {
Log.d(TAG, "處理--method3:" + "onProgressUpdate(Integer... values)");
} else if (values[0] == 1000) {
Log.d(TAG, "doInBackground--執行順利:" + "onProgressUpdate(Integer... values)");
}
}
}
public int method1()
{
Log.d(TAG, "分發方法---method1():" + "onProgressUpdate(Integer... values)");
return 0;
}
public int method2()
{
Log.d(TAG, "分發方法---method2():" + "onProgressUpdate(Integer... values)");
return 1;
}
public int method3()
{
Log.d(TAG, "分發方法---method3():" + "onProgressUpdate(Integer... values)");
return 0;
}
private int doSomething()
{
try {
TimeUnit.SECONDS.sleep(3);
return 0;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return 1;
}
}
相關文章
- PHP 多程式處理任務PHP
- 關於複雜任務與異常處理的設計模式探討!設計模式
- 一個簡單的MapReduce示例(多個MapReduce任務處理)
- UITableView複雜介面處理UIView
- 探索責任鏈模式:優雅處理複雜請求鏈模式
- AsyncTask非同步任務類非同步
- 複雜任務專案管理Project Office專案管理Project
- PHP多程式處理並行處理任務例項(轉,備用)PHP並行
- Java 多執行緒處理任務的封裝Java執行緒封裝
- Flink - CEP(複雜事件處理)事件
- CXF--處理複雜型別型別
- Datawhale-MySQL-任務六(複雜專案)MySql
- Android中非同步任務(AsyncTask)Android非同步
- 複雜任務中,流程的解耦設計解耦
- 深入理解安卓非同步任務AsyncTask安卓非同步
- AsyncTask實現非同步任務執行非同步
- Java多執行緒並行處理任務的實現Java執行緒並行
- 如何將複雜專案分解為可管理任務?
- RestTemplate處理巢狀的複雜返回物件REST巢狀物件
- Apache Flink複雜事件處理指南 - softwaremillApache事件REM
- 巧用狀態值處理複雜的 TableViewView
- oracle schedule 任務失敗處理Oracle
- Android的AsyncTask非同步任務淺析Android非同步
- Android後臺任務(HandlerThread、AsyncTask、IntentService)AndroidthreadIntent
- PHP CLI 模式多子程式任務處理PHP模式
- .bat批處理新增Python任務BATPython
- Android和iOS開發中的非同步處理(三)——多個非同步任務協作AndroidiOS非同步
- 一個Windows 系統究竟有多複雜?Windows
- 如何高效完成領導安排的複雜工作任務?羅列待辦任務清單很有效
- linux VM複製多個IP配置出錯的處理Linux
- 【譯】如何合理地處理複雜TableView頁面View
- 處理 JavaScript 複雜物件:深拷貝、Immutable & ImmerJavaScript物件
- Android執行緒管理之AsyncTask非同步任務Android執行緒非同步
- 等待多個非同步任務的方法非同步
- Laravel 7使用swoole+redis每秒處理任務LaravelRedis
- 基於Hyperf開發的任務排程系統.支援任務投遞,DAG任務編排(多個任務使用同一個事務).
- 處理多個會話時的 Cookie 和 Headers複用問題會話CookieHeader
- 處理多個會話時的 Cookie 和 Headers 複用問題會話CookieHeader