android AsyncTask 详细例子(2)
超时处理
001 |
import java.util.Timer; |
002 |
import java.util.TimerTask; |
003 |
004 |
import android.app.Activity; |
005 |
import android.os.AsyncTask; |
006 |
import android.os.Bundle; |
007 |
import android.widget.Toast; |
008 |
009 |
public class TimeoutTestActivity extends Activity { |
010 |
private final static int TIME_OUT = 3 * 1000; |
011 |
private final static int SLEEP_TIME = 2 * 1000; |
012 |
013 |
@Override |
014 |
public void onCreate(Bundle savedInstanceState) { |
015 |
super.onCreate(savedInstanceState); |
016 |
setContentView(R.layout.main); |
017 |
//new TimeOutTask().execute(); |
018 |
new CancelSelfWhenTimeOutTask().execute(); |
019 |
} |
020 |
021 |
private class CancelSelfWhenTimeOutTask extends AsyncTask<Void, Void, Void> { |
022 |
private boolean done = false; |
023 |
024 |
@Override |
025 |
protected Void doInBackground(Void... params) { |
026 |
cancelSelfWhenTimeOut(); |
027 |
sleep(); |
028 |
return null; |
029 |
} |
030 |
031 |
@Override |
032 |
protected void onPostExecute(Void result) { |
033 |
super.onPostExecute(result); |
034 |
Toast.makeText(TimeoutTestActivity.this, "任务完成", Toast.LENGTH_SHORT) |
035 |
.show(); |
036 |
} |
037 |
038 |
private void cancelSelfWhenTimeOut() { |
039 |
new Timer().schedule(new TimerTask() { |
040 |
041 |
@Override |
042 |
public void run() { |
043 |
if (!done) { |
044 |
CancelSelfWhenTimeOutTask.this.cancel(true); |
045 |
} |
046 |
} |
047 |
}, TIME_OUT); |
048 |
} |
049 |
050 |
private void sleep() { |
051 |
try { |
052 |
Thread.sleep(SLEEP_TIME); |
053 |
done = true; |
054 |
} catch (InterruptedException e) { |
055 |
} |
056 |
} |
057 |
} |
058 |
059 |
private class TimeOutTask extends AsyncTask<Void, Void, Void> { |
060 |
private boolean done = false; |
061 |
private boolean isTimeOut = false; |
062 |
063 |
@Override |
064 |
protected Void doInBackground(Void... params) { |
065 |
try { |
066 |
throwTimeOutException(); |
067 |
} catch (Exception e) { |
068 |
isTimeOut = true; |
069 |
} |
070 |
sleep(); |
071 |
return null; |
072 |
} |
073 |
074 |
@Override |
075 |
protected void onPostExecute(Void result) { |
076 |
super.onPostExecute(result); |
077 |
if (isTimeOut) { |
078 |
Toast.makeText(TimeoutTestActivity.this, "任务超时", |
079 |
Toast.LENGTH_SHORT).show(); |
080 |
} else { |
081 |
Toast.makeText(TimeoutTestActivity.this, "任务完成", |
082 |
Toast.LENGTH_SHORT).show(); |
083 |
} |
084 |
} |
085 |
086 |
private void throwTimeOutException() { |
087 |
new Timer().schedule(new TimerTask() { |
088 |
089 |
@Override |
090 |
public void run() { |
091 |
if (!done) { |
092 |
isTimeOut = true; |
093 |
} |
094 |
} |
095 |
}, TIME_OUT); |
096 |
} |
097 |
098 |
private void sleep() { |
099 |
try { |
100 |
Thread.sleep(SLEEP_TIME); |
101 |
done = true; |
102 |
} catch (InterruptedException e) { |
103 |
} |
104 |
} |
105 |
} |
106 |
107 |
} |
android AsyncTask 详细例子(2)的更多相关文章
- android AsyncTask 详细例子
一个典型AsyncTask的. 01 public class DialogTestActivity extends Activity { 02 private Button button1; ...
- Android -- AsyncTask 使用和缺陷
一.AsyncTask的基本用法 由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它.在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: ...
- android AsyncTask介绍(转)
android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...
- android AsyncTask介绍 转载
http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html AsyncTask和Handler对比 1 ) AsyncTask实 ...
- android AsyncTask介绍 AsyncTask和Handler对比
1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可 ...
- [Android Pro] 完美Android Cursor使用例子(Android数据库操作)
reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...
- linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux
安装 Android Studio详细教程 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jdk1.8.0_25 android-st ...
- Android MediaCodec 使用例子
Android MediaCodec 使用例子 下面的例子是使用MediaCodec 录制到文件的例子. 1 public class AvcEncoder { private MediaCodec ...
- 我的Android进阶之旅------>Android拍照小例子
今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...
随机推荐
- 广播接收者 BroadcastReceiver 示例-1
广播机制概述 Android广播分为两个方面:广播发送者和广播接收者,通常情况下,BroadcastReceiver指的就是广播接收者.广播作为Android组件间的通信方式,可以使用的场景如下: 1 ...
- (四)《Java编程思想》——可变参数列表
以object数组为参数的方法实现可变参数列表 package chapter5; /** * 以object数组为参数的方法实现可变参数列表 */ class A { } public class ...
- java泛型方法
Tool.java package cn.stat.p9.fanxing.demo; public class Tool<QQ> {//不确定类型时可以用泛型 private QQ q; ...
- java部分基础总结
新手期一些知识的总结面向对象: 首先先将面向对象与面向过程区分开:面向过程主要是通过过程,达到某种目的,这种目的的目标就是对象,二面向对象重点则是不再考虑过程,直接面向对象! 对象 概念:一切客观存在 ...
- c笔试题(1)
1.sizeof和strlen的区别 #include<stdio.h> #include<string.h> int main() { char a[10] = " ...
- uva 688 - Mobile Phone Coverage
经典问题,矩形面积并. 解法:一.矩形分割,每个矩形的两个横坐标和两个纵坐标排序,这样得到2n*2n个区间,对这些区间依次判断是否包含在n个矩形中间即可. 二.扫描线.具体还没实现过. 详见 ...
- 创建C#DLL
1. 创建classlibrary 2.编写一个COM接口和一个COM类 [Guid("DBE0E8C4-1C61-41f3-B6A4-4E2F353D3D05")] public ...
- 容器 list
(1) 插入操作,不能使用MyTestContain.begin()+3 之类?!(要对数据进行复制) list<int>::iterator pr=MyTestContain.begin ...
- Spark学习笔记-使用Spark History Server
在运行Spark应用程序的时候,driver会提供一个webUI给出应用程序的运行信息,但是该webUI随着应用程序的完成而关闭端口,也就是 说,Spark应用程序运行完后,将无法查看应用程序的历史记 ...
- matlab 对图像操作的函数概览
转自博客:http://blog.163.com/fei_lai_feng/blog/static/9289962200991713415422/ 一. 读写图像文件 1. imread imread ...