超时处理

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. SQLServer中跨库复制数据

    SQLServer中把某个表里的记录复制到另一个数据库的表中的操作方法. 场景 现有数据库a和数据库b,数据库a里有表table1,数据库b里有表table2.现在要把表table1里的记录复制到ta ...

  2. linux增大交换分区

    进来在批量搭建环境,遇到搭建完环境之后发现swap忘记的情况,后来百度了下,发现了下面的方法,网上可能存在好多相应的帖子说这个事情也比较简单,以下是自己实践的结果,分享给大家. 1.查看现有memor ...

  3. [A Top-Down Approach][第一章 计算机网络和因特网]

    [A Top-Down Approach][第一章 计算机网络和因特网] 标签(空格分隔): 计算机网络 介绍基本术语和概念 查看构成网络的基本硬件和软件组件. 从网络的边缘开始,考察在网络中运行的端 ...

  4. Maven初识

    说说maven,我们每做一个项目,都要往lib目录扔很多jar包,spring的啊hibernate的啊apache的啊等等,这样就会导致很多包不知从哪个角落下载回来的,名称千奇百怪,版本也不明,项目 ...

  5. C# 还原SQL数据库(非存储过程方式)

    Winform的代码,最好是在数据所在电脑上运行代码,不然会因为权限问题导致失败. 数据库备份: SqlConnection con = new SqlConnection("Data So ...

  6. java对象Integer不能引用传递

    java对象Integer不能引用传递 /** * The value of the <code>Integer</code>. * * @serial */ private ...

  7. ClustrMaps——访问者位置

    ClustrMaps——访问者位置: http://www3.clustrmaps.com/zh/counter/maps.php?url=http://www.cnblogs.com/JuneZha ...

  8. java事件演示

    package cn.stat.p3.windowdemo; import java.awt.Button; import java.awt.FlowLayout; import java.awt.F ...

  9. MSIL

    公共字段Add 将两个值相加并将结果推送到计算堆栈上. Add_Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add_Ovf_Un 将两个无符号整数值相加,执行溢出检查,并且将结 ...

  10. Unity中Mecanim工作流

    Mecanim工作流可以被分解为3个主要阶段:1.资源的准备和导入这一阶段由美术师或动画师通过第三方工具来完成,例如Max或Maya.2.角色的建立主要有以下两种方式1)人形角色的建立.Mecanim ...