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