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 ...
随机推荐
- CVE-2016-5343分析
最近在学习android内核漏洞,写篇博做个记录,也算是所学即用. https://www.codeaurora.org/multiple-memory-corruption-issues-write ...
- WINDOWS系统下环境变量PATH和CLASSPATH的意思
1 PATH 对于没有包含路径的命令,WINDOWS系统会默认去Windows 目录(C:\windows)和系统目录(C:\windows\system32)查找,如果没有找到,就去PATH变量内包 ...
- java下socket传文件
package cn.stat.p4.ipdemo; import java.io.BufferedReader; import java.io.BufferedWriter; import java ...
- ionic开发ios app
注意必须是mac系统 1. 首先要安装node环境,Ionic的安装和后续的许多前端工具的安装都依赖于node的包管理器npm. nodeJs环境的安装很简单,去官网下载最新版的NodeJs直接安装即 ...
- 求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字
#include <iostream> using namespace std; int main() {long long s,n,i,j,p;s=0; cin>>n; ...
- phpword的几个坑
下载地址http://phpword.codeplex.com/ 开发目的:有现成的word模板 替换模板中的字段 1.中文乱码问题,如果你文件本身就是utf8...把Phpword里的模板类的一行转 ...
- 文成小盆友python-num11-(1) 线程 进程 协程
本节主要内容 线程补充 进程 协程 一.线程补充 1.两种使用方法 这里主要涉及两种使用方法,一种为直接使用,一种为定义自己的类然后继承使用如下: 直接使用如下: import threading d ...
- ubuntu soft install
1.Mysql 安装就三个命令 mysql服务端 sudo apt-get install mysql-server mysql客户端 sudo apt-get install mysql-clien ...
- GO语言可以直接输出数组
package main import "fmt" func main(){ ]int ;i<;i++{ arr[i]=i } fmt.Printf("%v&quo ...
- iOS 编译64位FFMPEG
最近因为公司项目需要捣腾FFMPEG,所以看了一下资料,现在编译成功了,记录一下. 我自己发现大概有两种方式 二者共同部分 安装装yasm或者(MAcport,我用的是yasm,这里只记录yasm的) ...