多线程-AsyncTask异步任务

多线程-AsyncTask异步任务_第1张图片
效果图

代码

package com.example.threaddemo;


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


public class MainActivity extends AppCompatActivity {
    TextView textView;

    private static final String TAG = "MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = findViewById(R.id.textView);
//        主线程
        //查看当前线程,
        Log.d("TAG", "主线程 name:" +  Thread.currentThread().getName());

    }
    public void download(View v){
//        开始执行异步任务
        new MyAsyncTask().execute(0);
    }

    class MyAsyncTask extends AsyncTask{
//后台执行的 最耗时间的
        @Override
        protected Integer doInBackground(Integer... integers) {
            Log.d("TAG", "子线程 name:" +  Thread.currentThread().getName());
//                模拟下载
            for(int i=0;i<=100;i++){
                try {
                    Thread.sleep(100);
                    publishProgress(i);//就掉执行更新的代码onProgressUpdate()
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
//            返回100 表示100%执行完了
            return 100;
        }
//执行之前
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            Log.d(TAG,"准备执行线程了");
            Log.d("TAG", "执行上面那句话我在哪个线程:" +  Thread.currentThread().getName());
        }
//执行完毕后
        @Override
        protected void onPostExecute(Integer integer) {
            super.onPostExecute(integer);
            Log.d(TAG,"线程执行完毕");
            textView.setText("下载完了"+integer);
            Log.d("TAG", "执行上面那句话我在哪个线程:" +  Thread.currentThread().getName());
        }
//执行过程中
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            Log.d(TAG,"线程执行到:"+values[0]);
            Log.d("TAG", "执行上面那句话我在哪个线程:" +  Thread.currentThread().getName());
        }
    }

}



多线程-AsyncTask异步任务_第2张图片
介绍

多线程-AsyncTask异步任务_第3张图片
传参介绍

说明只有执行后台的代码(doInBackground)时在子线程,其余都在主线程

2019-04-28 18:45:17.886 11115-11115/com.example.threaddemo D/TAG: 主线程 name:main
2019-04-28 18:45:30.482 11115-11115/com.example.threaddemo D/MainActivity: 准备执行线程了
2019-04-28 18:45:30.482 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:30.485 11115-11423/com.example.threaddemo D/TAG: 子线程 name:AsyncTask #1
2019-04-28 18:45:30.585 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:0
2019-04-28 18:45:30.586 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:30.686 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:1
2019-04-28 18:45:30.686 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:30.786 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:2
2019-04-28 18:45:30.786 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:30.887 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:3
2019-04-28 18:45:30.887 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:30.987 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:4
2019-04-28 18:45:30.987 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
.
.
.
2019-04-28 18:45:40.435 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:40.536 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:99
2019-04-28 18:45:40.536 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:40.636 11115-11115/com.example.threaddemo D/MainActivity: 线程执行到:100
2019-04-28 18:45:40.636 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main
2019-04-28 18:45:40.637 11115-11115/com.example.threaddemo D/MainActivity: 线程执行完毕
2019-04-28 18:45:40.638 11115-11115/com.example.threaddemo D/TAG: 执行上面那句话我在哪个线程:main

你可能感兴趣的:(多线程-AsyncTask异步任务)