`

模拟android的AsyncTask类——异步任务工具类

阅读更多

my git : https://github.com/hejiawang

 

        Android的AsyncTask类是处理异步任务的工具类,使程序员不用new Thread,不用写handler,只要使用AsyncTask类就能实现异步任务的处理了,但是不能说只用AsyncTask类而不要handler了,因为AsyncTask类在源码实现时,起的是一个线程池,在这个线程池中会有一定数量的线程。

AsyncTask类部分源码:

/**
     * An {@link Executor} that can be used to execute tasks in parallel.
     */
    public static final Executor THREAD_POOL_EXECUTOR
            = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,
                    TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

 所以,在使用AsyncTask类时,不能盲目。。

 

参看AsyncTask类的源码,下面是模拟AsyncTask类功能的代码,就是把new Thread() 和 handler封装在一起。。。

package com.wang.mobilesafe.utils;

import android.os.Handler;

/**
 * 模拟android的AsyncTask类
 * </br>
 * 一个异步任务的工具类
 * </br>
 * 模板设计模式
 * @author HeJW
 *
 */
public abstract class MyAsyncTask {
	
	private Handler handler = new Handler(){
		public void handleMessage(android.os.Message msg) {
			
			onPostExecute();
		};
	};
	
	/**
	 * 耗时任务开始之前执行的方法
	 */
	public abstract void onPreExecute();
	
	
	/**
	 * 耗时任务执行之后调用的方法
	 */
	public abstract void onPostExecute();
	
	/**
	 * 执行的耗时任务,运行在子线程中
	 */
	public abstract void doInBackground();
	
	/**
	 * 执行任务
	 */
	public void execute(){
		
		onPreExecute();
		new Thread(){
			
			public void run() {
				
				doInBackground();
				handler.sendEmptyMessage(0);
			};
		}.start();
		
	}
}

 

1
1
分享到:
评论

相关推荐

    Android游戏源码——忍者快跑.zip

    "Android游戏源码——忍者快跑.zip" 提供的是一份Android游戏的源代码,这为我们提供了深入理解Android游戏开发的实践案例。 1. **游戏引擎**:Android游戏通常基于游戏引擎进行开发,例如Unity、Unreal Engine或...

    安卓Android源码——斗地主源码实现.zip

    这份"安卓Android源码——斗地主源码实现.zip"提供的压缩包包含了一个完整的斗地主游戏的源代码实现,其中主要的文件是"Android斗地主[牌桌实现源码].pdf"。这里我们将详细探讨这个项目中的核心知识点。 1. **...

    Android源码——图像冰冻特效源码_new_36.zip

    本压缩包"Android源码——图像冰冻特效源码_new_36.zip"提供的正是Android平台上的图像冰冻特效源代码,对于学习和开发Android图像处理应用的开发者来说,这是一个非常有价值的资源。 首先,我们要理解什么是“图像...

    安卓Android源码——hotel宾馆系统.zip

    本资源“安卓Android源码——hotel宾馆系统.zip”提供了一个模拟宾馆管理系统(hotel)的完整源代码,这对于学习Android应用开发,尤其是涉及用户交互、数据库操作和后台服务的开发者来说,是一份宝贵的资料。...

    安卓Android源码——高仿网易客户端UI(tabhost).rar

    本项目“安卓Android源码——高仿网易客户端UI(tabhost)”提供了一个很好的示例,展示了如何利用TabHost来构建类似网易新闻客户端的交互式界面。以下是对该项目中涉及的技术点的详细解释: 1. **TabHost**:...

    android真实项目教程(五)——有时三点两点雨_by_CJJ

    3. **异步处理**:由于网络操作应在后台线程执行,以避免阻塞用户界面,开发者需要掌握AsyncTask或Retrofit等工具来实现异步数据获取。 4. **权限管理**:Android系统有严格的权限控制,获取网络数据需要声明相应的...

    Android代码-FishJoyfinal.zip

    《Android游戏开发详解——以FishJoyfinal项目为例》 在Android平台上,游戏开发是一个充满挑战与机遇的领域,其中FishJoyfinal项目是一个典型的案例,它为我们揭示了Android游戏开发的基本流程和技术要点。本文将...

    android学习笔记.zip

    9. **异步处理**:Android中的AsyncTask、Handler、Looper和线程池是实现非阻塞UI的关键,同时还要了解现代的Coroutines和LiveData库。 10. **Android SDK和版本适配**:Android系统有多个版本,开发者需要了解API...

    Android烟花效果源码.zip

    接着,我们将深入到源码中的关键类——可能是名为Firework或类似名称的类。这个类通常会封装烟花的属性,如位置、颜色、速度和方向。每个烟花对象都会有自己的生命周期,从发射到爆炸,再到飘散,这一过程可以通过...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--延时任务的工具类 |--异常之UncaughtExceptionHandler全局捕获处理 |--异步任务AsyncTask的用法 |--异步任务的自定义 |--快捷方式增删查 |--手势识别器GestureDetector的用法 |--拍照之调用系统相机并显示及保存 ...

    Android应用源码之jamendo.rar

    **Android应用源码分析——jamendo** Android应用开发是一个复杂且多层面的工程,涉及到许多技术栈和组件的集成。本篇文章将深入探讨名为"jamendo"的Android应用源码,帮助开发者理解其背后的实现机制,提升自己的...

    应用源码之仿唱片机音乐播放器.zip

    9. **异步处理**:考虑到播放音乐可能涉及的IO操作,项目可能会采用AsyncTask或者Handler/Looper机制来处理耗时任务,避免阻塞主线程。 10. **版本适配**:由于Android系统版本众多,良好的源码还需要考虑不同版本...

    Android应用源码之策略游戏-回到战国源码.zip

    Android的`AsyncTask`或`Retrofit`库可以用来处理网络请求,实现异步操作。 6. **图像与音频**:游戏视觉效果和音效是增强用户体验的关键。开发者可能使用`Bitmap`和`ImageView`处理图像,使用`MediaPlayer`或`...

    仿QQ选择城市Demo

    开发者可能会使用异步加载策略,如AsyncTask或者使用现代的LiveData或RxJava来处理后台任务,以避免阻塞主线程并提高响应速度。 总的来说,【仿QQ选择城市Demo】涵盖了Android开发中的多个重要知识点,包括自定义...

    LoadButton

    在Android开发中,自定义View是一项常见的任务,它允许开发者根据设计需求创造出独特且符合应用风格的组件。本文将深入探讨如何实现一个“LoadButton”——一个既清新又美观的加载按钮,以此来提升用户体验。 首先...

    Spotify_Streamer-:作为Udacity的一部分的项目

    1. **Android Studio**:项目使用Google的集成开发环境(IDE)——Android Studio,它提供了丰富的工具和功能来支持Android应用的开发。 2. **布局设计**:应用的用户界面(UI)通常由XML文件定义,这些文件包含各种...

    USDRateService

    6. **Anko库**:Anko是JetBrains提供的一个Kotlin库,简化了Android开发中的常见任务,如Intent创建、Dialogs、AsyncTask等。虽然USDRateService可能不直接与Android界面交互,但Anko的其他非Android功能,如DSL...

    好玩的下拉刷新库

    在处理大量数据或者网络请求时,可以采用异步加载策略,如使用AsyncTask或者LiveData结合Repository模式。同时,利用RecyclerView的缓存机制,避免不必要的视图复用,提高滑动流畅度。 最后,为了让FunGameRefresh...

Global site tag (gtag.js) - Google Analytics