超时处理

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)的更多相关文章

  1. android AsyncTask 详细例子

    一个典型AsyncTask的. 01 public class DialogTestActivity extends Activity { 02     private Button button1; ...

  2. Android -- AsyncTask 使用和缺陷

    一.AsyncTask的基本用法 由于AsyncTask是一个抽象类,所以如果我们想使用它,就必须要创建一个子类去继承它.在继承时我们可以为AsyncTask类指定三个泛型参数,这三个参数的用途如下: ...

  3. android AsyncTask介绍(转)

    android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接 ...

  4. android AsyncTask介绍 转载

    http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html AsyncTask和Handler对比 1 ) AsyncTask实 ...

  5. android AsyncTask介绍 AsyncTask和Handler对比

    1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可 ...

  6. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  7. linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux

    安装 Android Studio详细教程 libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1 jdk1.8.0_25 android-st ...

  8. Android MediaCodec 使用例子

    Android MediaCodec 使用例子 下面的例子是使用MediaCodec 录制到文件的例子. 1 public class AvcEncoder { private MediaCodec ...

  9. 我的Android进阶之旅------>Android拍照小例子

    今天简单的学习了一下android拍照的简单实现. 当然该程序是个小例子,非常简单,没有什么复杂的操作,但是可以学习到Android 拍照API流程. 1.在布局文件中添加一个 surfaceView ...

随机推荐

  1. Linux下一些基本操作

    一.忘记root密码 1. sudo passwd root 2. 输入新密码. 二.查看内核版本: 1.查看内核版本命令:1) cat /proc/version 2) uname -a 3)  u ...

  2. python 下的数据结构与算法---4:线形数据结构,栈,队列,双端队列,列表

    目录: 前言 1:栈 1.1:栈的实现 1.2:栈的应用: 1.2.1:检验数学表达式的括号匹配 1.2.2:将十进制数转化为任意进制 1.2.3:后置表达式的生成及其计算 2:队列 2.1:队列的实 ...

  3. vs2013+EF6+Mysql

    1.首先需要在整个项目中添加一个Model类库,在类库中引用EF 我需要在该项目下添加EF的MYSQL对象实体 首先需要引入几个相关引用,我通过NuGet来添加,如下图 接下来我需要通过ADO.NET ...

  4. Xcode7国际化(根据系统语言切换App显示的语言) - 元宵节快乐!

    老规矩, 上gif 下面是配置的大概流程: 这个是要显示中文的.strings文件的内容和格式 这个是要显示英文的.strings文件的内容和格式 下面是应用名部分: 然后下面是代码部分: impor ...

  5. 强大的微软Microsoft Translator翻译接口

    一.前言 当我们需要对日文.韩文等语言转换中文字符的时候,就用到了微软提供的翻译接口. 二.实现流程 1.首先注册一个账号 https://datamarket.azure.com/account 2 ...

  6. hdu2937

    题目大意: 给出n求sn,中括号代表向下取整. 为了方便表述,我们令a = (3k+6)!,b = (3k+7),令c = (a+1)/b也就是式子中的前半部分,d = a/b也就是式子中的后半部分. ...

  7. UVALive - 5116

    dfs n以内所有素数的乘积map或set删多余的,有点思维在里面,就写写

  8. ZOJ3549 Little Keng(快速幂)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Little Keng Time Limit: 2 Seconds      Me ...

  9. 实例讲解MySQL联合查询

    好了终于贴完了MySQL联合查询的内容了,加上上一篇一共2篇,都是我转载的,实例讲解MySQL联合查询.那下面就具体讲讲简单的JOIN的用法了.首先我们假设有2个表A和B,他们的表结构和字段分别为: ...

  10. 为什么ELF文件的加载地址是0x8048000

    在一个进程的虚拟地址空间中,ELF文件是从0x8048000这个地址开始加载的,为什么会是这个地址? 回答:用命令ld --verbose可以看到0x08048000,ld的默认脚本用这个地址作为EL ...