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 ...
随机推荐
- SQLServer中跨库复制数据
SQLServer中把某个表里的记录复制到另一个数据库的表中的操作方法. 场景 现有数据库a和数据库b,数据库a里有表table1,数据库b里有表table2.现在要把表table1里的记录复制到ta ...
- linux增大交换分区
进来在批量搭建环境,遇到搭建完环境之后发现swap忘记的情况,后来百度了下,发现了下面的方法,网上可能存在好多相应的帖子说这个事情也比较简单,以下是自己实践的结果,分享给大家. 1.查看现有memor ...
- [A Top-Down Approach][第一章 计算机网络和因特网]
[A Top-Down Approach][第一章 计算机网络和因特网] 标签(空格分隔): 计算机网络 介绍基本术语和概念 查看构成网络的基本硬件和软件组件. 从网络的边缘开始,考察在网络中运行的端 ...
- Maven初识
说说maven,我们每做一个项目,都要往lib目录扔很多jar包,spring的啊hibernate的啊apache的啊等等,这样就会导致很多包不知从哪个角落下载回来的,名称千奇百怪,版本也不明,项目 ...
- C# 还原SQL数据库(非存储过程方式)
Winform的代码,最好是在数据所在电脑上运行代码,不然会因为权限问题导致失败. 数据库备份: SqlConnection con = new SqlConnection("Data So ...
- java对象Integer不能引用传递
java对象Integer不能引用传递 /** * The value of the <code>Integer</code>. * * @serial */ private ...
- ClustrMaps——访问者位置
ClustrMaps——访问者位置: http://www3.clustrmaps.com/zh/counter/maps.php?url=http://www.cnblogs.com/JuneZha ...
- java事件演示
package cn.stat.p3.windowdemo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.F ...
- MSIL
公共字段Add 将两个值相加并将结果推送到计算堆栈上. Add_Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add_Ovf_Un 将两个无符号整数值相加,执行溢出检查,并且将结 ...
- Unity中Mecanim工作流
Mecanim工作流可以被分解为3个主要阶段:1.资源的准备和导入这一阶段由美术师或动画师通过第三方工具来完成,例如Max或Maya.2.角色的建立主要有以下两种方式1)人形角色的建立.Mecanim ...