AsyncTask 處理複雜多個任務。

風的王子發表於2014-08-15

好長時間沒回到部落格寫東西了,今天寫點吧。言回正傳。

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;
    }
}



相關文章