70.自定义异步任务

1.抽象异步任务类:

  1. public abstract class YTAsyncTask<T> {
  2. private static final HandlerThread handlerThread = new HandlerThread(YTAsyncTask.class.getName(), 10);
  3. public YTAsyncTask() {
  4. }
  5. protected abstract void onPreExecute();
  6. protected abstract T doInBackground();
  7. protected abstract void onPostExecute(T param);
  8. public final YTAsyncTask<T> execute() {
  9. final Handler mainHandler = new Handler(Looper.getMainLooper());
  10. Handler bgHandler = new Handler(handlerThread.getLooper());
  11. this.onPreExecute();
  12. bgHandler.post(new Runnable() {
  13. public void run() {
  14. final T param= YTAsyncTask.this.doInBackground();
  15. mainHandler.post(new Runnable() {
  16. public void run() {
  17. YTAsyncTask.this.onPostExecute(param);
  18. }
  19. });
  20. }
  21. });
  22. return this;
  23. }
  24. static {
  25. handlerThread.start();
  26. }
  27. }

2.使用用例:

  1. public class MainActivity extends AppCompatActivity {
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. setContentView(R.layout.activity_main);
  6. testAsyncTask();
  7. }
  8. private void testAsyncTask() {
  9. new YTAsyncTask<String>() {
  10. @Override
  11. protected void onPreExecute() {
  12. Log.e("ytr", "onPreExecute,currentThread=" + Thread.currentThread().getName());
  13. }
  14. @Override
  15. protected String doInBackground() {
  16. Log.e("ytr", "doInBackground,currentThread=" + Thread.currentThread().getName());
  17. return "Hello World";
  18. }
  19. @Override
  20. protected void onPostExecute(String param) {
  21. Log.e("ytr", "onPostExecute,currentThread=" + Thread.currentThread().getName()+"\tparam="+param);
  22. }
  23. }.execute();
  24. }
  25. }

打印结果:

来自为知笔记(Wiz)

时间: 2024-10-06 16:17:23

70.自定义异步任务的相关文章

python---爬虫相关性能(各个异步模块的使用,和自定义异步IO模块)

一:线程池,进程池等相关文章了解 python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用) python---基础知识回顾(十)进程和线程(协程gevent:线程在I/O请求上的优化) python---异步IO(asyncio)协程 二:异步I/O模块的了解(同协程:线程在I/O请求上的优化) (一)asyncio模块的使用 1.使用简单实例 import asyncio,time async def func1(num): print(num,"befor

自定义异步IO框架

异步就是回调 异步 = 非阻塞+循环 select只能完成IO多路复用,不能完成异步 IO多路复用--->监听多个socket对象,这个过程是同步的 利用其特性可以开发异步模块 异步IO:非阻塞的socket + IO多路复用 自定义异步框架 import socket import select class HttpRequest(object): def __init__(self, sk, host, callback): self.socket = sk self.host = host

自定义异步IO模块开发

响应头和响应体是用两个换行分割的 sk.setblock(False) 不阻塞 host是IP  比如www.baidu.com也是host,IP地址也是 r,w,e=select.select() w是连接成功的socket对象 r是有数据返回的socket对象 IO多路复用:r,w,e=while 监听多个socket对象 异步IO:非阻塞的socket+IO多路复用 -非阻塞socket -select[自己对象],w,r 异步IO模块本身是一个线程同步,使用者是异步的 import so

python之自定义异步IO客户端

#!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "Skiler Hao" # date: 2017/5/16 15:04 import select import socket import pprint """ 自定义了异步IO模块 利用非阻塞的socket,不等待连接是否成功,不等待请求的相应 select模块,去监听创建的套接字,是否有准备写,准备读的 ""&quo

NoHttp封装--07 自定义异步任务框架

MainActivity: 1 public class MainActivity extends Activity implements View.OnClickListener { 2 3 .... 4 5 @Override 6 public void onClick(View v) { 7 MultiAsynctaskNetwork network = new MultiAsynctaskNetwork(networkInterface); 8 network.execute(); 9

200行自定义异步非阻塞Web框架

Python的Web框架中Tornado以异步非阻塞而闻名.本篇将使用200行代码完成一个微型异步非阻塞Web框架:Snow. 一.源码 本文基于非阻塞的Socket以及IO多路复用从而实现异步非阻塞的Web框架,其中便是众多异步非阻塞Web框架内部原理. #!/usr/bin/env python # -*- coding:utf-8 -*- import re import socket import select import time class HttpResponse(object)

自定义异步IO模块前戏

1.setblocking(0):无数据(连接无响应:数据未返回)就报错 2.IO多路复用 原文地址:https://www.cnblogs.com/jintian/p/11406564.html

在ASP.NET MVC中使用Knockout实践06,自定义验证、异步验证

在上一篇中体验了Knockout.Validation的基本验证,本篇体验自定义验证和异步验证. 自定义验证规则 ko.validation有一个rules属性,专门用来存放验证规则,它是一个键值对集合类型,key就是自定义验证规则的名称,value是一个json对象. @{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <style type="text/c

Tornado异步非阻塞的使用以及原理

Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快.得利于其 非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架. 一.Tornado的两种模式使用 1.同步阻塞模式 由于doing中sleep10秒,此时其他连接将被阻塞,必须等这次请求完成后其他请求才能连接成功. 1 import tornado.io