Android多线程--AsyncTask

安卓中开启多线程的博客在这里

Android多线程–Handler
这里只讲解一下AsyncTask

AsyncTask

  • 其实AsyncTask就是用安卓中的消息处理机制进行封装好的一个类,可以在其中特定的方法中修改ui界面
  • 主线程逻辑代码
  • 主线程中,仅仅写了一个点击按钮,同时开启一个AsyncTask的任务,并无其他复杂的操作
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Button button;
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        button= (Button) findViewById(R.id.button);
        button.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.button:
                new UpdateTask(button,getApplicationContext()).execute();
                break;
        }
    }
}
  • 下面我们来看一下重点,我们自己继承自AsyncTask的类中的代码逻辑
public class UpdateTask extends AsyncTask<Void,Integer,Boolean> {

    private Button button;
    private Context context;

    public UpdateTask(Button button,Context context) {
        this.button = button;
        this.context=context;
    }

    //这个方法会在后台任务开始之前调用,进行一些界面的初始化
    protected void onPreExecute() {
        super.onPreExecute();
        Toast.makeText(context, "我开始了", Toast.LENGTH_SHORT).show();
        button.setText("我开始啦");
    }

        //开启的新的子线程,用户后台中执行耗时的任务
        protected Boolean doInBackground(Void... params) {
            int count=0;
            while(true){
                count++;
                publishProgress(count);
                try {
                    Thread.sleep(200);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (count>=100){
                    break;
                }
            }
            return true;
        }


    //当后台任务调用了publishProgress方法后,调用此方法,,可以对UI更新
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        button.setText(values[0]+"");
    }

    //任务结束的时候会发生调用,用来进行一些界面的更新
    protected void onPostExecute(Boolean aBoolean) {
        super.onPostExecute(aBoolean);
        if (aBoolean) {
            Toast.makeText(context, "Done", Toast.LENGTH_SHORT).show();
            button.setText("我结束啦");
        }
    }
}
  • 效果图
    Android多线程--AsyncTask_第1张图片

你可能感兴趣的:(多线程,android,AsyncTask)