AsyncTask异步任务

 


前言

1.同步:一步一步来,一个时间只能做一件事情。

2.异步:一个时间可以同时做多个事情。


提示:以下是本篇文章正文内容,下面案例可供参考

一、多线程相关

1.何为线程、多线程?

  线程:一个独立执行路径;进程想要执行任务就需要依赖线程。换句话说,就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。

 

 多线程:同一时间内处理多项任务,从而提高效率和响应速度。


2. 为什么要使用多线程?

  • 提高程序运行速度:多线程可以并行处理任务,加快程序的执行速度。
  • 提高资源利用率:通过后台处理长时间运行的任务,多线程可以使CPU和内存资源得到更有效的利用。
  • 用户界面的响应性:用户界面可以在执行其他任务时保持响应状态,提高用户体验。
  • 并发执行多个任务:多线程允许程序的不同部分同时执行,这样可以在等待某些操作(如I/O操作)完成时继续执行其他任务。
  • 优化性能:可以为不同的线程设置不同的优先级,以优化整体性能。


3. ANR(Application Not Responding):应用程序无响应;


4. 什么时候使用多线程:不使用ANR时,耗时操作时


5. Android当中的多线程:

基础使用:

  • 继承Thread类:创建一个线程类继承自Thread,并重写其run()方法。然后创建该类的实例并调用start()方法来启动线程。
  • 实现Runnable接口:创建一个实现Runnable接口的类,并实现其run()方法。然后创建该类的实例,将其作为参数传递给Thread类的构造函数,并调用Thread的start()方法来启动线程。
  • 使用Handler:Handler是Android中用于处理线程间通信的机制。它允许你发送和处理Message和Runnable对象与一个线程的MessageQueue关联。

 ② 复合使用:

  • AsyncTask:这是一个轻量级的异步任务类,它允许你在后台线程中执行耗时操作,然后在主线程中更新UI。
  • HandlerThread:这是一个具有Looper的线程类,它可以创建一个消息循环,并通过Handler与其他线程通信。
  • IntentService:这是一个服务类,它使用工作线程来处理所有的start请求。

③高级使用:主要是指线程池(ThreadPool),它提供了一个可重用的线程集合来执行任务,可以有效地管理线程资源。

6. Main/UI Thread(主线程) 和 Worker Thread(工作线程)


7. Thread / Runnable 线程安全

  • 继承Thread类更简单直接,但可能导致继承体系结构受限;
  • 而实现Runnable接口更加灵活,可以与其他继承结构结合使用,并且允许多个线程共享同一任务实例。
  •  线程安全是指在多线程环境下,代码能够正确处理多个线程并发访问共享资源的情况,不会出现数据不一致或者其他的意外情况。  


8. 普通的主线程更新  

  • ① Activity.runOnUiThread(Runnable)
  • ② View.post(Runnable)
  • ③ View.postDelayed(Runnable, long 

9. Handler:对线程之间的通信


10. AsyncTask

  • ① 目的:方便后台线程中操作后更新UI
  • ② 实现:Thread和Handler进行了封装
  • ③ 实质:Handler异步消息处理机制 

 

二、AsyncTask

1.详解

AsyncTask的方法:

package com.example.asynctaskapplication;

import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

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

        new DownloadAsyncTask().execute("imooc","good");
    }
    public static class DownloadAsyncTask extends AsyncTask<String,Integer,Boolean>{

        /*
        * 在异步任务之前,在主线程中
        * */
        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            //可操纵UI

        }

        /*
        * 在另外一个线程处理数据
        * */
        @Override
        protected Boolean doInBackground(String... params) {
            for (int i = 0; i < 10000; i++) {
                Log.i(TAG,"doInBackground: " + params[0]);
//                抛出进度
                publishProgress(i);
            }
            try {
                Thread.sleep(100000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            return true;
        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);
//            也是在主线程中,执行结果 处理
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
//            收到进度,然后处理: 也是在UI线程中。

        }

        @Override
        protected void onCancelled(Boolean aBoolean) {
            super.onCancelled(aBoolean);
            
        }

        @Override
        protected void onCancelled() {
            super.onCancelled();
        }
    }

}
  •  泛型参数:<Params,Progress,Result>
  •  UI操作 onPreExecute onPostExecute
  •  后台线程操作 doInBackground
  •  输入输出 Params, Result
  •  进度显示 onProgressUpdate
  •  Show me the code: 下载文件等功能。

 


 

总结

提示:这里对文章进行总结

1.实践

2.原理

3.异步

4.性能

5.行程池

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值