现在的位置: 首页 > 移动开发 > 正文

android AsyncTask 详细例子(2)

2019年09月10日 移动开发 ⁄ 共 3171字 ⁄ 字号 评论关闭

超时处理

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 }

抱歉!评论已关闭.