android AsyncTask 详细例子

一个典型AsyncTask的。

01 public class DialogTestActivity extends Activity {
02     private Button button1;
03     private Task task;
04  
05     @Override
06     public void onCreate(Bundle savedInstanceState) {
07         super.onCreate(savedInstanceState);
08         setContentView(R.layout.main);
09         this.button1 = (Button) findViewById(R.id.button1);
10         button1.setOnClickListener(new View.OnClickListener() {
11  
12             @Override
13             public void onClick(View v) {
14                 if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) {
15                     Toast.makeText(DialogTestActivity.this"task 正在运行", Toast.LENGTH_SHORT).show();
16                     //task.cancel(true);  //  如果Task还在运行,则先取消它
17                 else {
18                     task = new Task();
19                     task.execute();
20                 }
21             }
22         });
23     }
24  
25     @Override
26     protected void onDestroy() {
27         super.onDestroy();
28         // 用户按回退的时候要取消正在进行的任务
29         task.cancel(true);
30     }
31  
32     private class Task extends AsyncTask<Void, Void, Void> {
33          
34         @Override
35         protected void onPreExecute() {
36             super.onPreExecute();
37             Toast.makeText(DialogTestActivity.this"task 开始运行", Toast.LENGTH_SHORT).show();
38         }
39          
40         @Override
41         protected Void doInBackground(Void... params) {
42             try {
43                 // 模拟耗时操作 比如网络连接等
44                 Thread.sleep(5000);
45             catch (InterruptedException e) {
46                 e.printStackTrace();
47             }
48             // 判断如果task已经cancel就没有必须继续进行下面的操作
49             if (!isCancelled()) {
50                 System.out.println("task 如果被cancel,就不会显示");
51             }
52             return null;
53         }
54  
55         @Override
56         protected void onPostExecute(Void result) {
57             super.onPostExecute(result);
58             Toast.makeText(DialogTestActivity.this"task 完成", Toast.LENGTH_SHORT).show();
59             // 所有调用当前context的对象要注意判断activity是否还存在
60             // 典型的比如弹窗
61             if (!isFinishing()) {
62                 try {
63                     createAlertDialog().show();
64                 catch (Exception e) {
65                 }
66             }
67         }
68  
69         @Override
70         protected void onCancelled() {
71             super.onCancelled();
72             System.out.println("task 取消");
73         }
74  
75     }
76  
77     private AlertDialog createAlertDialog() {
78         return new AlertDialog.Builder(DialogTestActivity.this).setTitle("fadfasdf")
79                 .setPositiveButton("OK"new DialogInterface.OnClickListener() {
80                     public void onClick(DialogInterface dialog, int whichButton) {
81  
82                     }
83                 }).setNegativeButton("Cancel"new DialogInterface.OnClickListener() {
84                     public void onClick(DialogInterface dialog, int whichButton) {
85  
86                     }
87                 }).create();
88     }
89 }
原文地址:https://www.cnblogs.com/dyllove98/p/3221658.html