超时处理
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 |
} |