Android 异步任务 代码很简短,简单异步工具封装,方便执行异步任务

比较简单,就3个类。

1、创建一个单例的线程池,用来执行异步任务

<pre name="code" class="java">package com.ferris.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class FerrisPoolManager {
	private ExecutorService service;

	private FerrisPoolManager() {
		int num = Runtime.getRuntime().availableProcessors();
		service = Executors.newFixedThreadPool(num * 2);
	}

	private static FerrisPoolManager manager;

	public static FerrisPoolManager getInstance() {
		if (manager == null) {
			synchronized (FerrisPoolManager.class) {
				if(manager == null) {
				manager = new FerrisPoolManager();
				}
			}
		}
		return manager;
	}

	public void addTask(Runnable runnable) {
		service.execute(runnable);
	}
	public void cancelTask(){
		service.shutdown();
	}
}

2、定义一个任务接口

package com.ferris.pool;

public interface FerrisTaskListem {
	public void get();  //运行在线程里

	public void update(); //运行在主线程(从哪里new就是哪个线程,也不一定是主线程service等)
}

3、任务执行对象

package com.ferris.pool;

import android.os.Handler;
import android.os.Message;

public class FerrisTask {
	private FerrisTaskListem taskListem;
	private Handler handler = new Handler() {
		public void handleMessage(android.os.Message msg) {
			if(taskListem!=null){
				taskListem.update();
			}
		};
	};

	public FerrisTask(FerrisTaskListem taskListem) {
		this.taskListem = taskListem;
	}

	public void Execute(){
		FerrisPoolManager.getInstance().addTask(new RunTask());
	}

	public class RunTask implements Runnable {
		@Override
		public void run() {
			// TODO Auto-generated method stub
			if(taskListem!=null){
				taskListem.get();
			}
			Message message=Message.obtain();
			handler.sendMessage(message);

		}
	}

}

4、使用方法

FerrisTask ferrisTask = new FerrisTask(new FerrisTaskListem() {
			@Override
			public void update() {  //主线程
				// TODO Auto-generated method stub
				String name = Thread.currentThread().getName();
				System.out.print(name);
			}

			@Override
			public void get() { //UI线程
				// TODO Auto-generated method stub
				String name = Thread.currentThread().getName();
				System.out.print(name);

			}
		});
		ferrisTask.Execute();
时间: 2024-11-03 17:21:11

Android 异步任务 代码很简短,简单异步工具封装,方便执行异步任务的相关文章

Asp.net 在网页编写C#代码示例-- 一个简单的web MsSql 命令执行环境

在给一个客户做的系统上,因为要对数据库进行查看,但之前都是用TeamView来连接到客户的服务器进行数据库操作的 但最近客户那边的TeamView好像更改过密码导致我无法正常连接,而巧了客户的网官因为有事没有上班所以也法获取新的密码. 因为业务原因急需查看数据库,所以就写了一个简单的SQl命令并部署到客户的服务器来通过Web执行Sql命令 将ConnectonString更改为自己的数据库连接并保存为**.aspx即可 <!DOCTYPE html> <html> <head

Android简单封装类似JQuery异步请求

在android开发中经常会使用异步请求数据,通常会使用handler或者AsyncTask去做,handler 配合message 使用起来比较麻烦,AsyncTask 线程池只允许128个线程工作,会有溢出的问题,(当然一般情况不会有那么多线程同时工作的)所以写了这个代码,还望高手指正! [Java]代码 01 package com.xbl.task; 02 03 import java.io.BufferedReader; 04 import java.io.InputStream; 0

【Java&amp;Android开源库代码剖析】のandroid-async-http(如何设计一个优雅的Android网络请求框架,同时支持同步和异步请求)开篇

在<[Java&Android开源库代码剖析]のandroid-smart-image-view>一文中我们提到了android-async-http这个开源库,本文正式开篇来详细介绍这个库的实现,同时结合源码探讨如何设计一个优雅的Android网络请求框架.做过一段时间Android开发的同学应该对这个库不陌生,因为它对Apache的HttpClient API的封装使得开发者可以简洁优雅的实现网络请求和响应,并且同时支持同步和异步请求. 网络请求框架一般至少需要具备如下几个组件:1

mvc area区域和异步表单,bootstrap简单实例

码农最怕眼高手低 今天来练习mvc Area技术和bootstrap以及异步表单的C#代码实现. 1.area区域架构对于建立复杂业务逻辑很有帮助,由  AreaRegistration.RegisterAllAreas()方法遍历路由表,获得所有注册的路由.参见 建立类库Common,下设一个文件夹BookStore 在其中建立model和controller.(注意引用System.Web.Mvc这个dll) 项目结构如图: 其中book.cs为model模型 namespace Commo

Python Web框架Tornado的异步处理代码示例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与另一个流行的Python web框架Django相比,tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但可以提供基本的web server功能,故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合,

C#实现异步编程的两个简单机制

理解程序.进程.线程三者之间的区别:简而言之,一个程序至少有一个进程,一个进程至少有一个线程进程就是在内存中运行的程序(即运行着的程序):一个进程一般只有一个线程,一个进程可以包含多个线程(多线程编程): 使用异步编程的简单机制一:异步委托    委托类型的BeginInvoke和EndInvoke方法.        BeginInvoke方法:            参数组成:引用方法的参数列表+callback参数+state参数            返回值:IAsyncResult接口

Python Web框架Tornado的异步处理代码演示样例

1. What is Tornado Tornado是一个轻量级但高性能的Python web框架,与还有一个流行的Python web框架Django相比.tornado不提供操作数据库的ORM接口及严格的MVC开发模式,但能够提供主要的web server功能.故它是轻量级的:它借助non-blocking and event-driven的I/O模型(epoll或kqueue)实现了一套异步网络库,故它是高性能的. Tornado的轻量级+高性能特性使得它特别适用于提供web api的场合

Highcharts+Ajax+Json+Sturts2实现的图形异步实时刷新的一个简单demo

原文:Highcharts+Ajax+Json+Sturts2实现的图形异步实时刷新的一个简单demo 源代码下载地址:http://www.zuidaima.com/share/1550463370480640.htm 此功能可以用在后端对数据的实时抓取,前端动态更新时使用,可以根据数据的变化进行实时刷新,基于之前我上传的一个图形demo改制.如有意见建议,疑问,大家可以留言一起探讨. 源代码截图:

Redis源码解析:19Hiredis异步API代码解析

Hiredis中的异步API函数需要与事件库(libevent,libev, ev)一起工作.因为事件循环的机制,异步环境中的命令是自动管道化的.因为命令是异步发送的,因此发送命令时,必要情况下,需要提供一个回调函数,以便在收到命令回复时调用该函数. 异步API涉及到的函数分别是: redisAsyncContext *redisAsyncConnect(const char *ip, int port); int redisAsyncCommand(redisAsyncContext *ac,