Android项目之异步处理_AsyncTask
来源:互联网 发布:中美军事差距知乎 编辑:程序博客网 时间:2024/06/03 05:58
任务类:
public class MyAsyncTask<D> implements Callable<AsyncResult<D>> { private static SingleThreadPool singleThreadPool = new SingleThreadPool(60, TimeUnit.SECONDS, "SingleThreadPool", Thread.NORM_PRIORITY - 1); private static Handler handler = new Handler(Looper.getMainLooper());//主线程 private AsyncResult<D> mResult = new AsyncResult<D>();//不同线程间切换时数据的载体 /** * 开始执行任务 */ public Future<AsyncResult<D>> execute() { return execute(singleThreadPool); } /** * 开始执行任务 */ public Future<AsyncResult<D>> execute(SingleThreadPool executor) { return executor.submit(this); } /** * 开始执行任务 */ public Future<AsyncResult<D>> execute(ExecutorService executor) { return executor.submit(this); } public AsyncResult<D> call() throws Exception { runOnBackground(mResult); post(); return mResult; } ; private void post() { handler.post(new Runnable() { @Override public void run() { runOnUIThread(mResult); } }); } /** * 该函数在线程中执行 */ protected void runOnBackground(AsyncResult<D> asyncResult) { } /** * 该函数在UI线程中执行 * * @param asyncResult {@link #runOnBackground(AsyncResult<D>)}执行后返回的结果 */ protected void runOnUIThread(AsyncResult<D> asyncResult) { }}
线程类:
public class SingleThreadPool implements Executor { private ExecutorService mExecutor; /** * 单任务线程池,当线程空闲超过设定时间时会回收线程,有新的任务时再起 * * @param keepAliveTime 允许线程最大空闲时间 * @param timeUnit 线程空闲时间单位 * @param threadName 线程池使用线程的名字,不可为空,可以为任意值,方便DDMS查看线程状态 * @param threadPriority 线程优先级 */ public SingleThreadPool(int keepAliveTime, TimeUnit timeUnit, final String threadName, final int threadPriority) { ThreadFactory threadFactory = new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r, threadName); thread.setPriority(threadPriority); return thread; } }; LinkedBlockingQueue<Runnable> linkedBlockingQueue = new LinkedBlockingQueue<>(); mExecutor = new ThreadPoolExecutor(0, 1, keepAliveTime, timeUnit, linkedBlockingQueue, threadFactory); } /** * 单任务线程池,默认优先级为(Thread.NORM_PRIORITY - 1)。当线程空闲超过设定时间时会回收线程,有新的任务时再起 * * @param keepAliveTime 允许线程最大空闲时间 * @param timeUnit 线程空闲时间单位 */ public SingleThreadPool(int keepAliveTime, TimeUnit timeUnit) { this(keepAliveTime, timeUnit, "SingleThreadPool", Thread.NORM_PRIORITY - 1); } public SingleThreadPool() { this(60, TimeUnit.SECONDS); } /** * 填加任务到队列,如果线程池中没有线程,将创建新的线程来执行任务,先进先出执行任务 */ public void execute(@NonNull Runnable runnable) { mExecutor.execute(runnable); } public <V> Future<V> submit(Callable<V> task) { return mExecutor.submit(task); }}
0 0
- Android项目之异步处理_AsyncTask
- android学习_AsyncTask(异步任务)
- Android开发_AsyncTask作用
- android耗时任务_AsyncTask
- Android之异步处理机制
- Android异步处理之AsyncTask
- Android总结03_AsyncTask解析
- android线程异步处理之AsyncTask
- Android线程异步处理之AsyncTask
- Android异步处理特性之AsyncTask
- Android线程异步处理之AsyncTask
- Android FrameWork 之异步消息处理线程
- Android异步消息处理之Thread+Handler
- Android事件处理之五 异步任务
- Android之Handler异步处理数据
- Android异步处理之AsyncTaskLoader简单使用
- Android异步处理之AsyncTaskLoader简单使用
- Android网络通信之异步任务处理
- DP算法(Dynamic Programming,俗称动态规划)是最经典算法之一
- STM32
- 自己搭建服务器通过外网访问内网的方法(端口映射、内网穿透、重定向等)
- 为什么把无穷大INF设置成0x3f3f3f3f?
- 通过ContentResolver调用系统URI实现的读取联系人信息
- Android项目之异步处理_AsyncTask
- 安装系统失败,多出来错误的系统引导项
- <Unity笔记>Camera.ScreenToWorldPoint 屏幕转世界位置
- 第9章 引用
- 快递小哥逆袭自传:用了6年时间做到了IT部门主管
- 夕拾算法进阶篇:29)深度搜索和广度搜索(图论)
- Kruskal算法例题
- 第10章 函数
- Java HashMap原理