• 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 }
  • 相关阅读:
    微信支付退款部分代码
    Raspberry PI 点亮LED
    Raspberry PI 摄像头
    RaspberryPI 3B系统烧录
    MySQL基础使用
    MySQL数据库管理系统概述
    Eclipse创建JAVA项目
    Brup Suite拦截https请求
    Github 第一个仓库
    python os模块主要函数
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3221649.html
Copyright © 2020-2023  润新知