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 ...
随机推荐
- DefaultResouceLoader的设计
它是什么 DefaultResourceLoader是Spring中的ResourceLoader的默认实现类,也是AbstractApplicationContext的父类,它也可以单独使用,用来从 ...
- 配置squid代理服务
1. 简述一下squid的用途?squid可以做代理和缓存服务器,而做代理时,可以分为正向代理和反向代理.正向代理用在企业办公环境中,企业员工上网通过代理来上网,代理的缓存功能可以为企业节省宝贵的带宽 ...
- ado.net 数据库连接的两方式种
DataAdapter: string connectionString = "data source=127.0.0.1;Database=dong;user id=sa;password ...
- WPF 制作圆角按钮
在程序对应坐置插入以下代码,或是先拖一个按钮控件到窗体中,再替换对应的代码. 修改 CornerRadius="18,3,18,3" 就可以改变圆角大小 按钮效果: <Bu ...
- 使用F#开发量化模型都缺什么?
量化模型多数是基于统计的,因此,统计运算库应该是必备的.在Matlab.R中包含了大量的统计和概率运算,可以说拿来就用,非常方便,相比之下,F#的资源就很少了,这里给大家提供几个链接,可以解决一部分问 ...
- iOS_SN_地图的使用(2)
上一篇讲的是地图的基本使用,和注意事项,这一篇主要讲POI检索.百度地图SDK提供三种类型的POI检索:周边检索.区域检索和城市内检索.下面将以周边检索为例,向大家介绍如何使用检索服务. - (voi ...
- [C#] 常用函数
查找字符串: string test="a,b,c,de"; 方法1:Contains test.Contains("b") //返回值 true 方法2:E ...
- web前端工程师学习之路开启(前言)
web前端工程师需要掌握的所有技能 图解1: 图解2:
- do/while(0) c4127
原文链接:http://cnicholson.net/2009/03/stupid-c-tricks-dowhile0-and-c4127/ // NOISY CODE #define MULTI_L ...
- DNS预获取(dns-prefetch)
今天翻看twitter的源码的时候看到了一下内容: <link rel=”dns-prefetch” href=”http://a0.twimg.com”/> <link rel=” ...