• 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 }
  • 相关阅读:
    CMU15-445 Project #2
    CMU15-445 Project #1 Buffer Pool
    挂分原因
    「杂谈」关于斜率优化维护凸包
    「题解」GYM 101620J Justified Jungle
    「题解」AGC 052 B Tree Edges XOR
    C++ MT19937 随机数 限制范围
    「题解」Codeforces 348C Subset Sums
    「学习笔记」联赛数论再学习
    「题解」洛谷 P4597 序列sequence
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3221658.html
Copyright © 2020-2023  润新知