AsyncTask简单使用

    xiaoxiao2021-03-25  140

    package com.tyran.ansynctask_demo1; import android.os.AsyncTask; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class MainActivity extends AppCompatActivity { @BindView(R.id.TV_Main) TextView TVMain; @BindView(R.id.PB_Main) ProgressBar PBMain; @BindView(R.id.BTN_Main) Button BTNMain; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ButterKnife.bind(this); } @OnClick(R.id.BTN_Main) public void onClick() { PBAsyncTask asyncTask = new PBAsyncTask(); asyncTask.execute(); } class PBAsyncTask extends AsyncTask<Void, Integer, Boolean> { private int progress; //主线程运行 //在异步线程运行前,在主线程做一些准备工作 @Override protected void onPreExecute() { Log.d("PBAsyncTask", "onPreExecute:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId()); super.onPreExecute(); PBMain.setVisibility(View.VISIBLE); progress = 0; } //异步线程运行 //在异步线程里运行一些耗时操作,或者逻辑操作 @Override protected Boolean doInBackground(Void... params) { Log.d("PBAsyncTask", "doInBackground:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId()); while (true) { //模拟处理数据,每500ms,ProgressBar跳动一次 try { if(progress <= 100) { Thread.sleep(500); progress += 10; //publishProgress执行后会回调onProgressUpdate方法,并把参数传递给onProgressUpdate publishProgress(progress); }else { return true; } } catch (InterruptedException e) { e.printStackTrace(); return false; } } } //主线程运行 //通过publishProgress传过来的参数,在主线程操作UI @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); Log.d("PBAsyncTask", "onProgressUpdate:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId()); PBMain.setProgress(values[0]); } //主线程运行 //doInBackground结束后回调,并将doInBackground的返回值传递过来 @Override protected void onPostExecute(Boolean aBoolean) { super.onPostExecute(aBoolean); Log.d("PBAsyncTask", "onPostExecute:" + Thread.currentThread().getName() + " TID:" + Thread.currentThread().getId()); if(aBoolean) { TVMain.setText("Work Finished"); }else { Toast.makeText(MainActivity.this, "Error", Toast.LENGTH_SHORT).show(); } } } }
    转载请注明原文地址: https://ju.6miu.com/read-7891.html

    最新回复(0)