你真的会用AsyncTask吗?
超时处理
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.zzzyk.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 &nb
补充:移动开发 , Android ,