看看AsyncTask(1)

看看AsyncTask(1)

AsyncTask 異步 android Markdown

AsyncTaskAsyncTask類用於執行後臺任務,並將執行結果更新到UI線程。

主要方法

  • doInBackground() :在後臺處理任務
  • onProgressUpdate :更新進度
  • publicProgress():像onProgressUpdate()傳參
  • onPostExecute():最後執行
  • onPreExecute():先前執行。

    執行順序:onPreExecute——>doInBackground——>publicProgress——>onProgressUpdate——>onPostExecute。


應用

異步從網絡加載圖片

package com.river.mysynctasktest;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.ImageView;
import android.widget.ProgressBar;

public class LoadImageTest extends Activity {
    static final String URL = "http://www.sxdaily.com.cn/NMediaFile"
            + "/2013/0304/SXRB201303040927000420350949232.jpg";
    ProgressBar mProgressBar;
    ImageView mImageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loadimagetest);
        mProgressBar = (ProgressBar) findViewById(R.id.pg);
        mImageView = (ImageView) findViewById(R.id.iv_netImage);
        MyAsyncTask myAsyncTask = new MyAsyncTask();
        myAsyncTask.execute(URL);
    }

    // 使用AsyncTask類
    class MyAsyncTask extends AsyncTask<String, Void, Bitmap> {

        @Override
        protected Bitmap doInBackground(String... arg0) {
            String url = arg0[0];
            Log.e("url", url);
            Bitmap bitmap = null;
            InputStream is;
            URLConnection conn;
            try {
                conn = new URL(url).openConnection();
                is = conn.getInputStream();
                BufferedInputStream bis = new BufferedInputStream(is);
                bitmap = BitmapFactory.decodeStream(bis);
                is.close();
                bis.close();

            } catch (IOException e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            // 提交異步執行結果
            mProgressBar.setVisibility(View.GONE);
            if (result != null)
                mImageView.setImageBitmap(result);
            else
                Log.e("error", "bitmap is null");
            // Toast.makeText(context, text, duration)
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            mProgressBar.setVisibility(View.VISIBLE);

        }

    }
}

異步更新進度條

package com.river.mysynctasktest;

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;

public class LoadProgressTest extends Activity {
    ProgressBar mProgressBar;
    private MyAsyncTask task;
    private Context context = this;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_loadprogress);
        mProgressBar = (ProgressBar) findViewById(R.id.pg_test);
        task = new MyAsyncTask();
        task.execute();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {
            // 設置cancel標誌
            task.cancel(true);
        }
    }

    class MyAsyncTask extends AsyncTask<Void, Integer, Void> {

        @Override
        protected Void doInBackground(Void... arg0) {

            for (int i = 1; i < 100; i++) {
                // 如果設置了cancel標誌,則跳出循環。
                if (isCancelled())
                    break;
                publishProgress(i);
                try {
                    Thread.sleep(300);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            mProgressBar.setVisibility(View.GONE);
            Toast.makeText(context, "到達頂點了", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            // TODO Auto-generated method stub
            super.onProgressUpdate(values);
            if (!isCancelled()) {
                Log.i("values", values[0] + "");
                mProgressBar.setProgress(values[0]);
            }

        }

    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章