AsyncTask 牛刀小试,实现下载进度条更新,ProgressBar

直接上代码,首先布局文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_handler_to"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingTop="@dimen/activity_vertical_margin">

    <TextView
        android:id="@+id/info_tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/send_info_bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="发送" />
    
</LinearLayout>


布局文件后,接下来看, activity 的代码 ,原话,直接上代码


package ?;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/**
 * @author song
 * @date :2017/6/9
 * @Description: 
 * 
 */
public class HandlerToActivity extends AppCompatActivity {

    private TextView info;
    private Button send_info_bt;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_handler_to);
        info = (TextView) findViewById(R.id.info_tv);
        send_info_bt = (Button) findViewById(R.id.send_info_bt);
        send_info_bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                new MyTask().execute("开始");
            }
        });
    }

    class MyTask extends AsyncTask<String, Integer, String> {

        //在后台线程中执行,onPreExecute之后调用,表示执行一个后台任务
        @Override
        protected String doInBackground(String... params) {
            Log.d("MyTask", "--------doInBackground------" + params);
            for (int i = 0; i <= 50; i++) {
                publishProgress(i * 2);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return "success";
        }

        //在UI线程调用,可以在执行任务前做准备工作。比较耗时的操作都可以放在这里
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            info.setText("正在开始更新...");
        }

        //相当于Handler 处理UI的方式
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            info.setText(s);
        }

        //相当于Handler 处理UI的方式
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            info.setText("当前进度:" + values[0] + "%");
        }

        //  用户调用取消时,要做的操作
        @Override
        protected void onCancelled() {
            super.onCancelled();

        }
    }

}

完成,拉代码,直接就可以跑。

这是一个简单的代码,其实技术含量还是挺高的


猜你喜欢

转载自blog.csdn.net/qq_33495943/article/details/73130682