Olá a todos.Na última vez que falamos sobre um exemplo do mecanismo AsyncTask no Android, desta vez continuamos falando sobre esse exemplo. Fofocando sobre isso, acertando. Vamos conversar Android juntos!
Inspetores, introduzimos a operação específica do código na parte de trás do capítulo anterior e fornecemos o código do arquivo de layout.Nesta rodada, forneceremos o código da operação lógica.O código contém principalmente AsyncTask
subclasses personalizadas e Escreva seu método de retorno de chamada, o código restante é principalmente o método do ciclo de vida e o ProgressBar
processo de atualização em Atividade ; a seguir, o código específico, consulte:
package com.example.talk8.blogapp05_handler;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ProgressBar;
import android.util.Log;
public class ActivityAsyncEx extends AppCompatActivity {
public AsyncTaskEx mAsyncTask;
public static ProgressBar mProecssBar;
public Button mBTShowProcess;
public String mProcessLength = String.valueOf(50);
private static final String TAG = "AsyncEx";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_async_ex);
Log.i(TAG, "onCreate: start Asnyc Task Thread:
"+Thread.currentThread().toString());
//获取进度条控件以及它的最大进度值
mProecssBar = (ProgressBar)findViewById(R.id.id_process_bar);
//获取按钮控件,用来控制是否在进度中显示进度
mBTShowProcess = (Button) findViewById(R.id.id_bt_show_process);
//创建自定义的AsyncTask对象
mAsyncTask = new AsyncTaskEx();
Log.i(TAG, "onCreate: before start Asnyc Task States = "+mAsyncTask.getStatus());
//在主线程中启动子线程
mBTShowProcess.setOnClickListener(v -> mAsyncTask.execute(mProcessLength));
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume: Status = "+mAsyncTask.getStatus());
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause: status = "+mAsyncTask.getStatus());
}
@Override
protected void onDestroy() {
super.onDestroy();
if(mAsyncTask.isCancelled()) {
Log.i(TAG, "onDestroy: task is canceled");
}else {
Log.i(TAG, "onDestroy: task is not canceled");
Log.i(TAG, "onDestroy: task state: "+mAsyncTask.getStatus());
mAsyncTask.cancel(true);
mAsyncTask = null;
}
}
//更新进度条
public void updateProcess(int value) {
//如果不在定义时赋值,那么它会出现null的情况
if(mProcessLength == null){
Log.i(TAG, "updateProcess: return");
return;
}
if(value>=0 && value <= Integer.parseInt(mProcessLength)) {
mProecssBar.setProgress(value+1);
}
}
}
//自定义AsyncTask的子类,指定3个参数的泛型类型,并且重写4个回调方法
class AsyncTaskEx extends AsyncTask<String, Integer,Boolean> {
private static final String TAG = "AsyncEx";
@Override
protected void onPreExecute() {
super.onPreExecute();
Log.d(TAG, "onPreExecute: Statue = "+this.getStatus()+
" Thread: "+Thread.currentThread().toString());
}
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
Log.d(TAG, "onPostExecute: res = "+aBoolean+ " status = "+this.getStatus()
+" Thread: "+Thread.currentThread().toString());
}
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
int process = 0;
if(values != null && values.length > 0) {
process = values[0].intValue();
}
Log.d(TAG, "onProgressUpdate: Thread: "+Thread.currentThread().toString());
new ActivityAsyncEx().updateProcess(process);
Log.d(TAG, "onProgressUpdate: process = "+values[0].intValue()+
" status = "+this.getStatus());
}
@Override
protected void onCancelled(Boolean aBoolean) {
super.onCancelled(aBoolean);
Log.d(TAG, "onCancelled: param = "+aBoolean);
}
@Override
protected void onCancelled() {
super.onCancelled();
Log.d(TAG, "onCancelled: ");
}
@Override
protected Boolean doInBackground(String... strings) {
int length = 0;
Log.d(TAG, "doInBackground: status = "+
this.getStatus()+ " Thread: "+Thread.currentThread().toString());
if(strings != null && strings.length > 0) {
length = Integer.valueOf(strings[0]);
}
for (int i=0; i<length;++i){
publishProgress(new Integer(i));
try {
Thread.sleep(10);
}catch (Exception e) {
e.printStackTrace();
}
}
return true;
}
}
Inspectores, comentários foram adicionados às partes principais do código. Leia o código em conjunto com as etapas descritas no capítulo anterior. A seguir, o resultado do programa. Consulte:
Veja, apresentaremos o exemplo do mecanismo AsnycTask no Android aqui, se você quiser saber quais exemplos estão por trás e ouvir a próxima decomposição!