Vamos falar sobre o Android juntos (a 185ª rodada: mecanismo AsyncTask 4 do Android)

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 AsyncTasksubclasses personalizadas e Escreva seu método de retorno de chamada, o código restante é principalmente o método do ciclo de vida e o ProgressBarprocesso 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:
Insira a descrição da imagem aqui

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!

Publicado 538 artigos originais · Gostei 132 · Visitantes 630.000+

Acho que você gosta

Origin blog.csdn.net/talk_8/article/details/105621665
Recomendado
Clasificación