• Android AsyncTask详解


    Android AsyncTask是一个轻量级的异步任务处理类

    常见的使用步骤->创建一个继承自AsyncTask类的异步任务处理类

     (AsyncTask<Params,Progress,Result>

    Params启动任务执行的输入参数,比如一组URL

    Progress后台任务执行的百分比

    Result执行完任务后的返回结果)

    class MyAsyncTask extends AsyncTask<Integer, Integer, String> {
    
        @Override
        protected String doInBackground(Integer... params) {
            //运行在工作线程
            //在onPreExecute方法执行完成后马上执行,负责执行
            //耗时的后台处理任务,可调用publishProgress方法实
            //时更新任务进度
        }
    
        @Override
        protected void onPreExecute() {
            //运行在UI线程
            //在执行后台耗时操作之前,通常用于一些初始化操作,比如进度条显示
        }
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            //运行在UI线程
            //在doBackground方法中,每次调用publishProgress方法都会触发该方法
        }
    }

     

     

    ->在UI线程创建MyAsyncTask实例

    ->在UI线程中调用mAsyncTask.execute()

     一个完整的例子

    MainActivity

    package com.example.myfirstapp;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.AsyncTask;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    
    public class MainActivity extends AppCompatActivity {
    
        private TextView txttitle;
        private ProgressBar pgbar;
        private Button btnupdate;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            txttitle = (TextView)findViewById(R.id.txttitle);
            pgbar = (ProgressBar)findViewById(R.id.pgbar);
            btnupdate = (Button)findViewById(R.id.btnupdate);
            btnupdate.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    MyAsyncTask myTask = new MyAsyncTask(txttitle,pgbar);
                    myTask.execute(1000);
                }
            });
        }
    }
    
    class DelayOperator {
        //延时操作,用来模拟下载
        public void delay()
        {
            try {
                Thread.sleep(1000);
            }catch (InterruptedException e){
                e.printStackTrace();;
            }
        }
    }
    
    class MyAsyncTask extends AsyncTask<Integer,Integer,String>
    {
        private TextView txt;
        private ProgressBar pgbar;
    
        public MyAsyncTask(TextView txt,ProgressBar pgbar)
        {
            super();
            this.txt = txt;
            this.pgbar = pgbar;
        }
    
    
        //该方法不运行在UI线程中,主要用于异步操作,通过调用publishProgress()方法
        //触发onProgressUpdate对UI进行操作
        @Override
        protected String doInBackground(Integer... params) {
            DelayOperator dop = new DelayOperator();
            int i = 0;
            for (i = 10;i <= 100;i+=10)
            {
                dop.delay();
                publishProgress(i);
            }
            //i + params[0].intValue()
            return  "";
        }
    
        //该方法运行在UI线程中,可对UI控件进行设置
        @Override
        protected void onPreExecute() {
            txt.setText("开始执行异步线程~");
        }
    
    
        //在doBackground方法中,每次调用publishProgress方法都会触发该方法
        //运行在UI线程中,可对UI控件进行操作
    
    
        @Override
        protected void onProgressUpdate(Integer... values) {
            pgbar.setProgress(values[0].intValue());
        }
    }

    布局代码

    activity_main

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MyActivity">
        <TextView
            android:id="@+id/txttitle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <!--设置一个进度条,并且设置为水平方向-->
        <ProgressBar
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:id="@+id/pgbar"
            style="?android:attr/progressBarStyleHorizontal"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/btnupdate"
            android:text="更新progressBar"/>
    </LinearLayout>
  • 相关阅读:
    airprobe 安装 part2
    USRP Daugherboard: DBSRX
    电赛又见电赛!2011电赛之我见
    USRP Experiment 1: Data transmission
    How to Switch Between GDM and KDM on Ubuntu
    USRP Daugherboard: BasicRX
    Oracle Analyze 命令 详解
    Oracle SQL优化 总结
    Oracle SQL优化 总结
    Oracle 用拼接字符串更新表 测试
  • 原文地址:https://www.cnblogs.com/shineyoung/p/11505053.html
Copyright © 2020-2023  润新知