线程--->AsyncTask初步认识

作者: pgydbh | 来源:发表于2018-04-26 16:35 被阅读10次
引用了:https://blog.csdn.net/zj510/article/details/51493015

目录 aaa.png

一.说明

1.默认多个AsyncTask异步执行
2.回调都执行在主线程中
private static class InternalHandler extends Handler {  
    public InternalHandler() {  
        super(Looper.getMainLooper());  
    }  
  
    @SuppressWarnings({"unchecked", "RawUseOfParameterizedType"})  
    @Override  
    public void handleMessage(Message msg) {  
        AsyncTaskResult<?> result = (AsyncTaskResult<?>) msg.obj;  
        switch (msg.what) {  
            case MESSAGE_POST_RESULT:  
                // There is only one result  
                result.mTask.finish(result.mData[0]);  
                break;  
            case MESSAGE_POST_PROGRESS:  
                result.mTask.onProgressUpdate(result.mData);  
                break;  
        }  
    }  
}  
3.内部由自己实现的线程池与handle构成

二.基本用法(实例:三)

函数 时间
onPreExecute 任务开始前(ui线程)
doInBackground 任务(次线程)
onProgressUpdate 任务中途发出信号(ui线程)
onPostExecute 任务结束后(ui线程)

三.看看默认异步

public class Main extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        new MyTestTask().execute();
        new MyTestTask().execute();
    }


    private class MyTestTask extends AsyncTask<Void, Void, Void>{

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            System.out.println("我要开始了");
            Toast.makeText(Main.this, "我要开始了", Toast.LENGTH_SHORT).show();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            sleep(5000);
            return null;
        }

        @Override
        protected void onProgressUpdate(Void... values) {
            super.onProgressUpdate(values);
        }

        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            System.out.println("我结束了");
            Toast.makeText(Main.this, "我结束了", Toast.LENGTH_SHORT).show();
        }
    }

    private void sleep(int time){
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
04-26 08:23:47.141 12455-12455/com.example.rtyui.androidteach I/System.out: 我要开始了
04-26 08:23:47.147 12455-12455/com.example.rtyui.androidteach I/System.out: 我要开始了
04-26 08:23:52.154 12455-12455/com.example.rtyui.androidteach I/System.out: 我结束了
04-26 08:23:57.155 12455-12455/com.example.rtyui.androidteach I/System.out: 我结束了
结论:AsyncTask默认为异步执行

四.如何实现同步

方式1:使用AsyncTask的线程池
new MyTestTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new MyTestTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
方式2:自己定义线程池
ExecutorService executorService = Executors.newFixedThreadPool(2);
new MyTestTask().executeOnExecutor(executorService);
new MyTestTask().executeOnExecutor(executorService);
new MyTestTask().executeOnExecutor(executorService);

相关文章

  • 线程--->AsyncTask初步认识

    引用了:https://blog.csdn.net/zj510/article/details/51493015 ...

  • 线程--->ThreadPool初步认识

    目录 一.说明 1.线程池:就是一个管家,本来线程都是野孩子,现在有了一个家。 2.核心线程:就是线程池会保留数个...

  • 源码分析AsyncTask的工作原理

    一、AsyncTask原理介绍 AsyncTask的实现原理 = 线程池+ Handler 其中:线程池用于线程调...

  • 第11章 Android的线程和线程池

    1.主线程和子线程 11.2Android中的线程形态 11.2.1 AsyncTask AsyncTask 是一...

  • Android面试之线程和线程池

    Android中的线程形态 AsyncTask底层用到了线程池。AsyncTask封装了线程池和Handler,它...

  • Asynctask

    底层:handler + 线程池 Asynctask 的实例必须在主线程中创建 Asynctask 的execut...

  • Python里并发编程中的线程信息隔离

    初步认识信息隔离 信息隔离的意义何在 . 初步认识信息隔离 什么是信息隔离? 比如说,咱有两个线程,线程A里的变量...

  • async task 注意地方

    AsyncTask用的是线程池,线程不用就会放回池中. 有新的AsyncTask会取出已有线程,之后开始执行,这就...

  • AsyncTask原理及不足

    AsyncTask理解: AsyncTask是Handler与线程池的封装。 网络请求等耗时操作在线程池中完成,通...

  • AsyncTask原理分析

    AsyncTask在安卓中常用于线程间通信。在子线程执行耗时任务,在主线程更新UI。 AsyncTask内部封装了...

网友评论

    本文标题:线程--->AsyncTask初步认识

    本文链接:https://www.haomeiwen.com/subject/mfbplftx.html