Android-- AsyncTask异步任务

相关概念

  • 应用程序(Application) 为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)
  • 进程(Process) 运行中的程序,系统调度与资源分配的一个独立单位,操作系统会为每个进程分配 一段内存空间,程序的依次动态执行,经历代码加载 -> 执行 -> 执行完毕的完整过程。
  • 线程(Thread) 比进程更小的执行单元,每个进程可能有多条线程,线程需要放在一个进程中才能执行。 线程是由程序负责管理的,而进程则是由系统进行调度的。
  • 多线程(Multithreading) 并行地执行多条指令,将CPU的时间片按照调度算法,分配给各个线程,实际上是分时执行的,只是这个切换的时间很短,用户感觉是同时而已!

多线程

  1. 通过Thread创建
//继承Thread,重写run()
class myThread extends Thread{
	@Override
	public void run(){
	//...
	}
}
new myThread().start();	//开启线程
  1. 通过Runnable创建
    实现Runnable接口,implementation Runnable
new Thread(new Runnable(){
	@Override
	public void run(){	//...	}
}).start();
  1. 通过Callable创建
    Callable(接口) 内部有一个call()方法,相当于前面的run()
    Future(接口) cancel()/get():取消任务/获取执行结果
    FutureTask 内部实现了Runnable和Future接口
FutureTask<Integer> task = new FutureTask<>(new Callable<Integer>(){
	@Override
	public Integer call() thows Exception{
	//..
	}
});
new Thread(task).start();

//Future的get()方法为阻塞式,不能在主线程调用
  1. AsyncTask
    AsyncTask是一个抽象类,一般会定义一个类继承AsyncTask然后重写相关方法
    相关方法及执行流程
    在这里插入图片描述
    示例
/*
** AsyncTask<Params,Progress,Result>
** Params:启动任务执行的输入参数,如http的url
** Progress: 后台任务执行的百分比
** Result: 后台任务执行完毕的返回结果
** 不需要指令类型的话void
*/
public class MyAsyncTask extends AsyncTask<Integer,Integer,String>  
{  
    private TextView txt;  
    private ProgressBar pgbar;  
  
    public MyAsyncTask(TextView txt,ProgressBar pgbar)  
    {  
        super();  
        this.txt = txt;  
        this.pgbar = pgbar;  
    }  
  
  
    //该方法不运行在UI线程中,主要用于异步操作,通过调用publishProgress()方法  
    //触发onProgressUpdate对UI进行操作  
    @Override  
    protected String doInBackground(Integer... params) {  
        DelayOperator dop = new DelayOperator();  
        int i = 0;  
        for (i = 10;i <= 100;i+=10)  
        {  
            dop.delay();  
            publishProgress(i);  
        }  
        return  i + params[0].intValue() + "";  
    }  
  
    //该方法运行在UI线程中,可对UI控件进行设置  
    @Override  
    protected void onPreExecute() {  
        txt.setText("开始执行异步线程~");  
    }  
  
  
    //在doBackground方法中,每次调用publishProgress方法都会触发该方法  
    //运行在UI线程中,可对UI控件进行操作  
  
  
    @Override  
    protected void onProgressUpdate(Integer... values) {  
        int value = values[0];  
        pgbar.setProgress(value);  
    }  
}

MORE

  1. 线程的状态
    sleep(long) 休眠
    wait() Object方法,使当前线程处于等待状态
    notify() Object方法,唤醒等待状态的线程
    CPU执行资格 排队等待
    CPU执行权 正在被执行
  2. 同步 关键字 synchronized
    把需要同步执行的任务用synchronized括起来
synchronized(this){//静态方法中可传入 类名.class
	//...
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值