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