android AsyncTask 详细例子

来源:互联网 发布:centos ftp指定目录 编辑:程序博客网 时间:2024/06/03 13:58

一个典型AsyncTask的。

01public 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}
原创粉丝点击