android AsyncTask 详细例子
一个典型AsyncTask的。
| 01 | publicclassDialogTestActivity extendsActivity { | 
| 02 |     privateButton button1; | 
| 03 |     privateTask task; | 
| 04 | 
| 05 |     @Override | 
| 06 |     publicvoidonCreate(Bundle savedInstanceState) { | 
| 07 |         super.onCreate(savedInstanceState); | 
| 08 |         setContentView(R.layout.main); | 
| 09 |         this.button1 = (Button) findViewById(R.id.button1); | 
| 10 |         button1.setOnClickListener(newView.OnClickListener() { | 
| 11 | 
| 12 |             @Override | 
| 13 |             publicvoidonClick(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 = newTask(); | 
| 19 |                     task.execute(); | 
| 20 |                 } | 
| 21 |             } | 
| 22 |         }); | 
| 23 |     } | 
| 24 | 
| 25 |     @Override | 
| 26 |     protectedvoidonDestroy() { | 
| 27 |         super.onDestroy(); | 
| 28 |         // 用户按回退的时候要取消正在进行的任务 | 
| 29 |         task.cancel(true); | 
| 30 |     } | 
| 31 | 
| 32 |     privateclassTask extendsAsyncTask<Void, Void, Void> { | 
| 33 |          | 
| 34 |         @Override | 
| 35 |         protectedvoidonPreExecute() { | 
| 36 |             super.onPreExecute(); | 
| 37 |             Toast.makeText(DialogTestActivity.this, "task 开始运行", Toast.LENGTH_SHORT).show(); | 
| 38 |         } | 
| 39 |          | 
| 40 |         @Override | 
| 41 |         protectedVoid 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 |             returnnull; | 
| 53 |         } | 
| 54 | 
| 55 |         @Override | 
| 56 |         protectedvoidonPostExecute(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 |         protectedvoidonCancelled() { | 
| 71 |             super.onCancelled(); | 
| 72 |             System.out.println("task 取消"); | 
| 73 |         } | 
| 74 | 
| 75 |     } | 
| 76 | 
| 77 |     privateAlertDialog createAlertDialog() { | 
| 78 |         returnnewAlertDialog.Builder(DialogTestActivity.this).setTitle("fadfasdf") | 
| 79 |                 .setPositiveButton("OK", newDialogInterface.OnClickListener() { | 
| 80 |                     publicvoidonClick(DialogInterface dialog, intwhichButton) { | 
| 81 | 
| 82 |                     } | 
| 83 |                 }).setNegativeButton("Cancel", newDialogInterface.OnClickListener() { | 
| 84 |                     publicvoidonClick(DialogInterface dialog, intwhichButton) { | 
| 85 | 
| 86 |                     } | 
| 87 |                 }).create(); | 
| 88 |     } | 
| 89 | } | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号