android AsyncTask 详细例子(2)
超时处理
| 001 | importjava.util.Timer; | 
| 002 | importjava.util.TimerTask; | 
| 003 | 
| 004 | importandroid.app.Activity; | 
| 005 | importandroid.os.AsyncTask; | 
| 006 | importandroid.os.Bundle; | 
| 007 | importandroid.widget.Toast; | 
| 008 | 
| 009 | publicclassTimeoutTestActivity extendsActivity { | 
| 010 |     privatefinalstaticintTIME_OUT = 3* 1000; | 
| 011 |     privatefinalstaticintSLEEP_TIME = 2* 1000; | 
| 012 | 
| 013 |     @Override | 
| 014 |     publicvoidonCreate(Bundle savedInstanceState) { | 
| 015 |         super.onCreate(savedInstanceState); | 
| 016 |         setContentView(R.layout.main); | 
| 017 |         //new TimeOutTask().execute(); | 
| 018 |         newCancelSelfWhenTimeOutTask().execute(); | 
| 019 |     } | 
| 020 | 
| 021 |     privateclassCancelSelfWhenTimeOutTask extendsAsyncTask<Void, Void, Void> { | 
| 022 |         privatebooleandone = false; | 
| 023 | 
| 024 |         @Override | 
| 025 |         protectedVoid doInBackground(Void... params) { | 
| 026 |             cancelSelfWhenTimeOut(); | 
| 027 |             sleep(); | 
| 028 |             returnnull; | 
| 029 |         } | 
| 030 | 
| 031 |         @Override | 
| 032 |         protectedvoidonPostExecute(Void result) { | 
| 033 |             super.onPostExecute(result); | 
| 034 |             Toast.makeText(TimeoutTestActivity.this, "任务完成", Toast.LENGTH_SHORT) | 
| 035 |                     .show(); | 
| 036 |         } | 
| 037 | 
| 038 |         privatevoidcancelSelfWhenTimeOut() { | 
| 039 |             newTimer().schedule(newTimerTask() { | 
| 040 | 
| 041 |                 @Override | 
| 042 |                 publicvoidrun() { | 
| 043 |                     if(!done) { | 
| 044 |                         CancelSelfWhenTimeOutTask.this.cancel(true); | 
| 045 |                     } | 
| 046 |                 } | 
| 047 |             }, TIME_OUT); | 
| 048 |         } | 
| 049 | 
| 050 |         privatevoidsleep() { | 
| 051 |             try{ | 
| 052 |                 Thread.sleep(SLEEP_TIME); | 
| 053 |                 done = true; | 
| 054 |             } catch(InterruptedException e) { | 
| 055 |             } | 
| 056 |         } | 
| 057 |     } | 
| 058 | 
| 059 |     privateclassTimeOutTask extendsAsyncTask<Void, Void, Void> { | 
| 060 |         privatebooleandone = false; | 
| 061 |         privatebooleanisTimeOut = false; | 
| 062 | 
| 063 |         @Override | 
| 064 |         protectedVoid doInBackground(Void... params) { | 
| 065 |             try{ | 
| 066 |                 throwTimeOutException(); | 
| 067 |             } catch(Exception e) { | 
| 068 |                 isTimeOut = true; | 
| 069 |             } | 
| 070 |             sleep(); | 
| 071 |             returnnull; | 
| 072 |         } | 
| 073 | 
| 074 |         @Override | 
| 075 |         protectedvoidonPostExecute(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 |         privatevoidthrowTimeOutException() { | 
| 087 |             newTimer().schedule(newTimerTask() { | 
| 088 | 
| 089 |                 @Override | 
| 090 |                 publicvoidrun() { | 
| 091 |                     if(!done) { | 
| 092 |                         isTimeOut = true; | 
| 093 |                     } | 
| 094 |                 } | 
| 095 |             }, TIME_OUT); | 
| 096 |         } | 
| 097 | 
| 098 |         privatevoidsleep() { | 
| 099 |             try{ | 
| 100 |                 Thread.sleep(SLEEP_TIME); | 
| 101 |                 done = true; | 
| 102 |             } catch(InterruptedException e) { | 
| 103 |             } | 
| 104 |         } | 
| 105 |     } | 
| 106 | 
| 107 | } | 
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号