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