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作为Python语言开发的一个高级Web框架,支持异步任务执行的能力,尤其在处理大规模数据库操作时,能够通过异步处理提升系统性能。而线程池技术,则是实现高效异步任务处理的重要手段之一。Django异步任务...
本文将深入探讨“电子功用-异步任务取消方法、装置及电子设备”这一主题,旨在提供关于异步任务管理和控制的详尽理解。 异步任务的取消通常涉及到以下几个关键知识点: 1. **异步编程模型**:异步任务基于各种编程...
在构建一个基于Spring的简单高效通用异步任务处理系统时,我们的主要目标是实现轻量级、简单、高效、通用、高扩展性和高可靠性的解决方案。在这个系统中,我们将利用Spring框架的功能,如Job调度和线程池封装,以及...
在Spring Boot框架中,异步任务处理是一种常见需求,它能提高应用的性能和响应速度。Spring Boot提供了简单易用的API和注解来支持异步任务的实现,特别是通过`@Async`注解和定时任务`@Scheduled`。下面我们将深入...
在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在用户界面(UI)线程中避免阻塞,确保用户体验流畅。"异步任务下载图片"这个主题,主要涉及到如何利用AsyncTask从网络下载图片,并...
在IT行业中,异步任务处理是一项关键的技术,它在提高应用程序性能、优化资源利用和提升用户体验方面发挥着重要作用。在“Ansync Test 异步任务带有详细注释”这个项目中,我们可以深入学习如何实现和管理异步操作,...
`Params`代表异步任务执行时需要输入的参数类型,`Progress`表示后台任务执行过程中的进度类型,而`Result`则是任务执行完成后返回的结果类型。 `AsyncTask`包含四个关键方法: 1. `onPreExecute()`:在执行后台...
在IT行业中,异步任务处理是一项重要的技术,它允许应用程序在执行耗时操作时不会阻塞用户界面,提高系统的响应速度和效率。Workerman是一款开源的PHP常驻内存型的高性能、高并发的PHP框架,它特别适用于开发TCP、...
在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在主线程中需要执行网络请求、数据库操作或大型数据处理时。它能够避免UI线程被阻塞,提供更好的用户体验。让我们深入了解一下`...
在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,它允许开发者在后台线程中执行任务,同时保持与UI线程的交互。本实例提供了完整的AsyncTask实现,对于初学者和进阶开发者来说,都是一个极...
在Android平台上开发一款音乐播放器应用,异步任务(AsyncTask)是不可或缺的组件,它主要用于执行后台操作,以避免阻塞主线程并提供流畅的用户体验。以下将详细阐述Android音乐播放器应用中异步任务的运用及其相关...
在Web开发中,Yii2 Console组件常...这个过程涉及到Yii2 Console命令的创建、Swoole服务器的配置、Swoole与Yii2的结合以及异步任务的处理逻辑。理解并掌握这些知识点,将有助于你构建高效、稳定的异步任务处理系统。
Android 异步任务。减少了许多重复的工作,是一个Google的AsyncTask的精简版(使用Google的AsyncTask,内部开销比较大,不适合简单开发,对于比较负责或者要求多线程异步任务的时候比较适合使用Google的AsyncTask)
标题提到的"dotnet-AspNetCore项目中非常轻量的异步任务管理模块"正是针对这类需求的一个解决方案。这个模块可能是为了简化任务调度、提高系统性能和资源利用率而设计的。 描述中提到的“非常轻量”意味着这个模块...
在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,尤其是在网络下载图片这样的场景下。异步任务允许我们在线程后台执行任务,同时在主线程更新UI,确保用户界面的流畅性。以下是对这个主题的...
在Android开发中,异步任务(AsyncTask)是一种常见的处理耗时操作的方式,它使得开发者能够在后台线程中执行任务,同时保持与UI线程的交互。标题“异步任务类下载”指的是利用AsyncTask来实现从服务器端下载图片的...
在Android开发中,异步任务是必不可少的一部分,它允许开发者在后台执行耗时操作,而不会阻塞用户界面。本文将深入探讨“android异步任务框架源码”,讲解其核心概念、工作原理以及如何实现。 Android中的异步任务...
异步消息任务跟踪意味着在任务执行过程中,会涉及到消息的发送和接收,而这些操作是异步进行的,以便提高系统的响应速度和并发能力。 首先,我们需要创建一个自定义的`Job`类,这个类需要实现`org.quartz.Job`接口...
本文主要介绍了如何利用Python的Celery库来实现异步任务、周期任务和定时任务。Celery是一个基于Python开发的分布式任务队列系统,它支持后台任务的异步处理、周期性任务的调度和定时任务的执行。它使得任务的执行不...
Android中的异步任务设计主要体现在`AsyncTask`类上,它是Android SDK提供的一种方便快捷的多线程解决方案,用于在后台执行耗时操作,并在完成后更新UI。`AsyncTask`的广泛使用是因为它简化了线程与主线程之间的通信...