超时处理

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. C#winform检测电脑安装的.netframework版本和是否安装了某软件

    代码如下: //C#获取已安装 .NET Framework 版本 private static string[] GetDotNetVersions() { DirectoryInfo[] dire ...

  2. Xshell 4的上传与下载

    http://blog.csdn.net/lioncode/article/details/7921525

  3. Java初转型-Maven入门

    原系列名:Maven学习总结(一) 原博文出自于:http://www.cnblogs.com/xdp-gacl/p/3498271.html 感谢! 一.Maven的基本概念 Maven(翻译为&q ...

  4. C#。4.1数组的应用

    数组的应用 (一).冒泡排序.1.冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数.2.趟数=n-1:次数=n-趟数.3.里层循环使用if比较相临的两个数的大小,进行数值交换. 代码 in ...

  5. Geodatabase - 修改字段别名(Field Alias)

    以下代码演示的是通过个人数据库打开要素类,并对指定的字段别名进行修改,其中,需要注意的是,不能通过Engine中的AxMapControl直接获得,如 //直接获得IFeatureClass. //E ...

  6. oracle commit之后的数据回滚

    当你晕晕乎乎的执行了commit之后,突然间意思到自己点错了,那说明你和我碰到了一样的问题. 瞬间感觉大冷天头顶冒汗,那就说明你的感觉对了.废话少说,下面是我的办法: 下面的例子都是以Test表为例. ...

  7. foreach遍历扩展(二)

    一.前言 假设存在一个数组,其遍历模式是根据索引进行遍历的:又假设存在一个HashTable,其遍历模式是根据键值进行遍历的:无论哪种集合,如果它们的遍历没有一个共同的接口,那么在客户端进行调用的时候 ...

  8. java 后台线层也叫守护线层

    import java.util.concurrent.locks.*; class Do9 { public static void main(String[] args) { Ds d=new D ...

  9. 环形进度条带数字显示(canvas)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. POJ1850 组合数学

    POJ1850 问题重述: 用26个小写字母进行编码,编码规则如下: 1)每个编码中前一个字母必须小于后一个字母 2)编码按照长度从小到大排列,相同长度按字典序进行排列 输入一个字母串,求解该编码对应 ...