溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Android--異步任務(wù)AsyncTask

發(fā)布時(shí)間:2020-07-20 13:34:11 來(lái)源:網(wǎng)絡(luò) 閱讀:293 作者:uncom2005 欄目:移動(dòng)開(kāi)發(fā)


 

 實(shí)例:使用異步任務(wù)從網(wǎng)絡(luò)上下載


package com.example.xiaocool.anysctaskdemo;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URLConnection;


public class MainActivity extends ActionBarActivity {
    private TextView show;
    private Button download;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = (TextView) this.findViewById(R.id.show_down);
        download = (Button) this.findViewById(R.id.button);
        download.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DownTask task = new DownTask(MainActivity.this);
                try {
                    /**
                     * 開(kāi)始執(zhí)行耗時(shí)的任務(wù)
                     */
                    task.execute(new URI("http://news.baidu.com/"));
                } catch (Exception E) {
                    E.printStackTrace();
                }

            }
        });
    }


    /**
     * Params  啟動(dòng)任務(wù)執(zhí)行的輸入?yún)?shù)的類型
     * Progress 后臺(tái)任務(wù)完成的進(jìn)度值得類型,
     * Result   后臺(tái)執(zhí)行任務(wù)完成后 返回結(jié)果的類型
     * 如果不需要指定類型 Void
     * <p/>
     * 重寫(xiě)的方法都有系統(tǒng)調(diào)用
     */
    class DownTask extends AsyncTask<URI, Integer, String> {

        ProgressDialog progressDialog;
        //定義記錄已讀取行的數(shù)量
        int hasRead = 0;
        Context mContext;

        public DownTask(Context context) {
            mContext = context;
        }

        /**
         * 后臺(tái)線程將要完成的任務(wù),該方法可以調(diào)用publishProgress(Progress value)更新任務(wù)的執(zhí)行進(jìn)度
         *
         * @param params
         * @return
         */
        @Override
        protected String doInBackground(URI... params) {
            StringBuilder sb = new StringBuilder();
            try {
                URLConnection conn = params[0].toURL().openConnection();
                //打開(kāi)conn連接對(duì)應(yīng)的輸入流,包裝成BufferReader 對(duì)象
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(conn.getInputStream(), "utf-8")
                );
                String line = null;
                while ((line = br.readLine()) != null) {
                    sb.append(line + "\n");
                    hasRead++;
                    //更新任務(wù)的執(zhí)行進(jìn)度
                    publishProgress(hasRead);
                }
                return sb.toString();
            } catch (Exception e) {
                e.printStackTrace();

            }
            return null;
        }

        /**
         * 在doInBackground方法中調(diào)用publishProgress(Progress value),更新任務(wù)的進(jìn)度后,就會(huì)觸發(fā)該方法
         *
         * @param values
         */
        @Override
        protected void onProgressUpdate(Integer... values) {
            show.setText("讀取了"+values[0]);
            progressDialog.setProgress(values[0]);
        }

        /**
         * 該方法將在執(zhí)行后臺(tái)耗時(shí)程序時(shí)被調(diào)用,該方法用于完成一些初始化的準(zhǔn)備工作,比如在界面上顯示進(jìn)度條
         */
        @Override
        protected void onPreExecute() {
            progressDialog = new ProgressDialog(mContext);
            progressDialog.setTitle("任務(wù)正在執(zhí)行中!");
            progressDialog.setMessage("任務(wù)正在執(zhí)行中,稍后?。?);
            //取消按鈕不可用
            progressDialog.setCancelable(false);
            progressDialog.setMax(202);
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setIndeterminate(false);
            progressDialog.show();
        }

        /**
         * 當(dāng)doInBackground方法完成后,系統(tǒng)會(huì)自動(dòng)調(diào)用該方法 并將doInBackground()的返回值傳給該方法
         *
         * @param s
         */
        @Override
        protected void onPostExecute(String s) {
            //返回HTML 頁(yè)面的內(nèi)容
            show.setText(s);
            progressDialog.dismiss();
        }
    }
}


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI