超时处理
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 {
010private final static int TIME_OUT = 3 * 1000;
011private final static int SLEEP_TIME = 2 * 1000;
012
013@Override
014public void onCreate(Bundle savedInstanceState) {
015super.onCreate(savedInstanceState);
016setContentView(R.layout.main);
017//new TimeOutTask().execute();
018new CancelSelfWhenTimeOutTask().execute();
019}
020 www.2cto.com
021private class CancelSelfWhenTimeOutTask extends AsyncTask<Void, Void, Void> {
022private boolean done = false;
023
024@Override
025protected Void doInBackground(Void... params) {
026cancelSelfWhenTimeOut();
027sleep();
028return null;
029}
030
031@Override
032protected void onPostExecute(Void result) {
033super.onPostExecute(result);
034Toast.makeText(TimeoutTestActivity.this, "任务完成", Toast.LENGTH_SHORT)
035.show();
036}
037
038private void cancelSelfWhenTimeOut() {
039new Timer().schedule(new TimerTask() {
040
041@Override
042public void run() {
043if (!done) {
044CancelSelfWhenTimeOutTask.this.cancel(true);
045}
046}
047}, TIME_OUT);
048}
049
050private void sleep() {
051try {
052Thread.sleep(SLEEP_TIME);
053done = true;
054} catch (InterruptedException e) {
055}
056}
057}
058
059private class TimeOutTask extends AsyncTask<Void, Void, Void> {
060private boolean done = false;
061private boolean isTimeOut = false;
062
063@Override
064protected Void doInBackground(Void... params) {
065try {
066throwTimeOutException();
067} catch (Exception e) {
068isTimeOut = true;
069}
070sleep();
071return null;
072}
073
074@Override
075protected void onPostExecute(Void result) {
076super.onPostExecute(result);
077if (isTimeOut) {
078Toast.makeText(TimeoutTestActivity.this, "任务超时",
079Toast.LENGTH_SHORT).show();
080} else {
081Toast.makeText(TimeoutTestActivity.this, "任务完成",
082Toast.LENGTH_SHORT).show();
083}
084}
085
086private void throwTimeOutException() {
087new Timer().schedule(new TimerTask() {
088
089@Override
090public void run() {
091if (!done) {
092isTimeOut = true;
093}
094}
095}, TIME_OUT);
096}
097
098private void sleep() {
099try {
100Thread.sleep(SLEEP_TIME);
101done = true;
102} catch (InterruptedException e) {
103}
104}
105}
106
107 }
作者: Dean83