Android 开发工具类 15_ MyAsyncTask

AsyncTask 对于生命周期较短且需要在UI上显示进度和结果的后台操作是很好的解决方案。然而,当 Activity 重新启动时,这种操作将不会持续进行,也就是说,AsyncTask 在设备的方向变化而导致 Activity 被销毁和重新创建时会被取消。对于生命周期较长的后台操作,如从 Internet 下载数据,使用 Service 组件是更好的选择。

 1 private class MyAsyncTask extends AsyncTask<String, Integer, String> {
 2     @Override
 3     protected String doInBackground(String... parameter) {
 4       // Moved to a background thread.
 5       String result = "";
 6       int myProgress = 0;
 7       
 8       int inputLength = parameter[0].length();
 9 
10       // Perform background processing task, update myProgress]
11       for (int i = 1; i <= inputLength; i++) {
12         myProgress = i;
13         result = result + parameter[0].charAt(inputLength-i);
14         try {
15           Thread.sleep(100);
16         } catch (InterruptedException e) { }
17         publishProgress(myProgress);
18       }
19 
20       // Return the value to be passed to onPostExecute
21       return result;
22     }
23 
24     @Override
25     protected void onProgressUpdate(Integer... progress) {
26       // Synchronized to UI thread.
27       // Update progress bar, Notification, or other UI elements
28       asyncProgress.setProgress(progress[0]);
29     }
30 
31     @Override
32     protected void onPostExecute(String result) {
33       // Synchronized to UI thread.
34       // Report results via UI update, Dialog, or notifications
35       asyncTextView.setText(result);
36     }
37   }
38   

执行异步任务。每一个 AsyncTask 实例只能执行一次。如果试图第二次调用 execute,则会抛出一个异常。

1 private void executeAsync() {
2     /**
3      * Listing 9-12: Executing an asynchronous task
4      */
5     String input = "redrum ... redrum";
6     new MyAsyncTask().execute(input); 
7   }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。