`
xfjt297857539
  • 浏览: 152363 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于异步任务

阅读更多
  packagetest.me.layout;
  
  importandroid.app.Activity;
  importandroid.os.AsyncTask;
  importandroid.os.Bundle;
  importandroid.os.Handler;
  importandroid.os.Message;
  importandroid.os.SystemClock;
  importandroid.util.Log;
  importandroid.widget.TextView;
  importandroid.widget.Toast;
  
  /**一个使用异步任务的例子。一般来说一个异步任务只执行一次,这个例子有点非主流,任务结束后会触发下一次任务执行。
  *由任务task在屏幕上打印数字,第一次任务执行由主Activity的onCreate触发,每次任务结束后
  *设定下一次触发的时间,共执行5次。对于任务来说doInBackground()接收任务的参数params,并执行产生数字的动作,每一个数字
  *产生后调用一次publishProgress()来更新UI,这个函数本身也是异步的只是用来发个消息调用完成后立即返回,
  *而产生数字的动作在继续进行。更新界面的操作在onProgressUpdate()中设定。
  *所有的on函数都由系统调用,不能用户调用。
  *代码中使用Handler是为了能触发任务执行,android规定这种异步任务每次执行完就结束,若要重新执行需要new一个新的。
  *异步任务只能在UI线程里面创建和执行*/
  publicclasstestAsyncextendsActivity{
  privatefinalintMSG_TIMER=12;
  privateTextViewvText=null;
  
  @Override
  protectedvoidonCreate(BundlesavedInstanceState){
  //TODOAuto-generatedmethodstub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.test);
  vText=(TextView)findViewById(R.id.TextView01);
  vText.setText("Num...");
  
  newtask().execute("->");
  
  }
  
  //接收任务task发来的消息,触发一个新的任务
  privatefinalHandlerhandler=newHandler(){
  
  @Override
  publicvoidhandleMessage(Messagemsg){
  //TODOAuto-generatedmethodstub
  super.handleMessage(msg);
  
  switch(msg.what){
  caseMSG_TIMER:
  newtask().execute("->");
  break;
  }
  }
  
  };
  
  //任务执行次数
  privatestaticinttimes=1;
  
  //AsyncTask<>的参数类型由用户设定,这里设为三个String
  //第一个String代表输入到任务的参数类型,也即是doInBackground()的参数类型
  //第二个String代表处理过程中的参数类型,也就是doInBackground()执行过程中的产出参数类型,通过publishProgress()发消息
  //传递给onProgressUpdate()一般用来更新界面
  //第三个String代表任务结束的产出类型,也就是doInBackground()的返回值类型,和onPostExecute()的参数类型
  privateclasstaskextendsAsyncTask<String,String,String>{
  
  
  
  //后台执行的耗时任务,接收参数并返回结果
  //当onPostExecute()执行完,在后台线程中被系统调用
  @Override
  protectedStringdoInBackground(String...params){
  //TODOAuto-generatedmethodstub
  //在这里产生数据,送给onProgressUpdate以更新界面
  Stringpre=params[0];
  
  for(inti=0;i<5;i++){
  publishProgress(pre+i);
  //这里是否需要停顿下
  SystemClock.sleep(1000);
  }
  
  return"任务结束";
  }
  
  //任务执行结束后,在UI线程中被系统调用
  //一般用来显示任务已经执行结束
  @Override
  protectedvoidonPostExecute(Stringresult){
  //TODOAuto-generatedmethodstub
  super.onPostExecute(result);
  
  Toast.makeText(testAsync.this,result,Toast.LENGTH_SHORT).show();
  
  //任务执行5次后推出
  if(times>5){
  return;
  }
  
  //设定下一次任务触发时间
  Messagemsg=Message.obtain();
  msg.what=MSG_TIMER;
  handler.sendMessageDelayed(msg,10000L);
  }
  
  //最先执行,在UI线程中被系统调用
  //一般用来在UI中产生一个进度条
  @Override
  protectedvoidonPreExecute(){
  //TODOAuto-generatedmethodstub
  super.onPreExecute();
  Toast.makeText(testAsync.this,"开始执行第"+times+"次任务:"+this,Toast.LENGTH_SHORT).show();
  times++;
  }
  
  
  //更新界面操作,在收到更新消息后,在UI线程中被系统调用
  @Override
  protectedvoidonProgressUpdate(String...values){
  //TODOAuto-generatedmethodstub
  super.onProgressUpdate(values);
  
  vText.append(values[0]);
  
  }
  
  }
  
  }
分享到:
评论

相关推荐

    Django异步任务线程池实现原理

    Django作为Python语言开发的一个高级Web框架,支持异步任务执行的能力,尤其在处理大规模数据库操作时,能够通过异步处理提升系统性能。而线程池技术,则是实现高效异步任务处理的重要手段之一。Django异步任务...

    电子功用-异步任务取消方法、装置及电子设备

    本文将深入探讨“电子功用-异步任务取消方法、装置及电子设备”这一主题,旨在提供关于异步任务管理和控制的详尽理解。 异步任务的取消通常涉及到以下几个关键知识点: 1. **异步编程模型**:异步任务基于各种编程...

    基于Spring打造简单高效通用的异步任务处理系统

    在构建一个基于Spring的简单高效通用异步任务处理系统时,我们的主要目标是实现轻量级、简单、高效、通用、高扩展性和高可靠性的解决方案。在这个系统中,我们将利用Spring框架的功能,如Job调度和线程池封装,以及...

    springboot异步任务案例

    在Spring Boot框架中,异步任务处理是一种常见需求,它能提高应用的性能和响应速度。Spring Boot提供了简单易用的API和注解来支持异步任务的实现,特别是通过`@Async`注解和定时任务`@Scheduled`。下面我们将深入...

    异步任务下载图片

    在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在用户界面(UI)线程中避免阻塞,确保用户体验流畅。"异步任务下载图片"这个主题,主要涉及到如何利用AsyncTask从网络下载图片,并...

    Ansync Test 异步任务带有 详细注释

    在IT行业中,异步任务处理是一项关键的技术,它在提高应用程序性能、优化资源利用和提升用户体验方面发挥着重要作用。在“Ansync Test 异步任务带有详细注释”这个项目中,我们可以深入学习如何实现和管理异步操作,...

    异步任务的Demo

    `Params`代表异步任务执行时需要输入的参数类型,`Progress`表示后台任务执行过程中的进度类型,而`Result`则是任务执行完成后返回的结果类型。 `AsyncTask`包含四个关键方法: 1. `onPreExecute()`:在执行后台...

    实现浏览器访问基于workman的异步任务

    在IT行业中,异步任务处理是一项重要的技术,它允许应用程序在执行耗时操作时不会阻塞用户界面,提高系统的响应速度和效率。Workerman是一款开源的PHP常驻内存型的高性能、高并发的PHP框架,它特别适用于开发TCP、...

    异步任务AsyncTask

    在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在主线程中需要执行网络请求、数据库操作或大型数据处理时。它能够避免UI线程被阻塞,提供更好的用户体验。让我们深入了解一下`...

    Android异步任务完整实例

    在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,它允许开发者在后台线程中执行任务,同时保持与UI线程的交互。本实例提供了完整的AsyncTask实现,对于初学者和进阶开发者来说,都是一个极...

    android 音乐播放器 异步任务

    在Android平台上开发一款音乐播放器应用,异步任务(AsyncTask)是不可或缺的组件,它主要用于执行后台操作,以避免阻塞主线程并提供流畅的用户体验。以下将详细阐述Android音乐播放器应用中异步任务的运用及其相关...

    yii2 console 集成swoole 执行异步任务,例如注册邮件,发送短信

    在Web开发中,Yii2 Console组件常...这个过程涉及到Yii2 Console命令的创建、Swoole服务器的配置、Swoole与Yii2的结合以及异步任务的处理逻辑。理解并掌握这些知识点,将有助于你构建高效、稳定的异步任务处理系统。

    Android 异步任务和Google的异步任务

    Android 异步任务。减少了许多重复的工作,是一个Google的AsyncTask的精简版(使用Google的AsyncTask,内部开销比较大,不适合简单开发,对于比较负责或者要求多线程异步任务的时候比较适合使用Google的AsyncTask)

    dotnet-AspNetCore项目中非常轻量的异步任务管理模块

    标题提到的"dotnet-AspNetCore项目中非常轻量的异步任务管理模块"正是针对这类需求的一个解决方案。这个模块可能是为了简化任务调度、提高系统性能和资源利用率而设计的。 描述中提到的“非常轻量”意味着这个模块...

    异步任务网络下载图片一

    在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在网络下载图片这样的场景下。异步任务允许我们在线程后台执行任务,同时在主线程更新UI,确保用户界面的流畅性。以下是对这个主题的...

    异步任务类下载

    在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,它使得开发者能够在后台线程中执行任务,同时保持与UI线程的交互。标题“异步任务类下载”指的是利用AsyncTask来实现从服务器端下载图片的...

    android异步任务框架源码

    在Android开发中,异步任务是必不可少的一部分,它允许开发者在后台执行耗时操作,而不会阻塞用户界面。本文将深入探讨“android异步任务框架源码”,讲解其核心概念、工作原理以及如何实现。 Android中的异步任务...

    quartz异步消息任务跟踪

    异步消息任务跟踪意味着在任务执行过程中,会涉及到消息的发送和接收,而这些操作是异步进行的,以便提高系统的响应速度和并发能力。 首先,我们需要创建一个自定义的`Job`类,这个类需要实现`org.quartz.Job`接口...

    python基于celery实现异步任务周期任务定时任务

    本文主要介绍了如何利用Python的Celery库来实现异步任务、周期任务和定时任务。Celery是一个基于Python开发的分布式任务队列系统,它支持后台任务的异步处理、周期性任务的调度和定时任务的执行。它使得任务的执行不...

    android异步任务设计思详解(AsyncTask)

    Android中的异步任务设计主要体现在`AsyncTask`类上,它是Android SDK提供的一种方便快捷的多线程解决方案,用于在后台执行耗时操作,并在完成后更新UI。`AsyncTask`的广泛使用是因为它简化了线程与主线程之间的通信...

Global site tag (gtag.js) - Google Analytics