灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2385回复:0

你真的会用AsyncTask吗?

楼主#
更多 发布于:2012-09-06 14:04

超时处理

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 www.atcpu.com
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 }
作者: Dean83


喜欢0 评分0
游客

返回顶部