Android延时加载两种方式

来源:互联网 发布:mcgs组态软件视频教程 编辑:程序博客网 时间:2024/05/20 14:20

发中如果涉及到了比较耗时的工作,之前做法是利用ProgressDialog做界面有好提示,新开现成做耗时操作,最后用Handler做UI线程的修改。界面如下:



  • 利用Handler实现步骤:

oncreate方法:

  1. public void onCreate(Bundle savedInstanceState) { 
  2.         super.onCreate(savedInstanceState); 
  3.         setContentView(R.layout.main); 
  4.         
  5.         progressDialog = new ProgressDialog(MainActivity.this); 
  6.         progressDialog.setMessage("Loading…"); 
  7.         progressDialog.show(); 
  8.         
  9.         new Thread(new Runnable() { 
  10.             
  11.             @Override 
  12.             public void run() { 
  13.                 //这里作比较耗时的工作,暂时用线程休眠2秒作替代。 
  14.                 try { 
  15.                     Thread.sleep(4*1000); 
  16.                 } catch (InterruptedException e) { 
  17.                     // TODO Auto-generated catch block 
  18.                     e.printStackTrace(); 
  19.                 } 
  20.                 myHandler.sendMessage(myHandler.obtainMessage()); 
  21.             } 
  22.         }).start(); 
  23.     }
复制代码
先show一个dialog,然后新开Thread做耗时操作,最后调用handler的sendMessage,唤醒Handler。handler写法如下:

  1. private Handler myHandler = new Handler(){
  2.         @Override 
  3.         public void handleMessage(Message msg) { 
  4.             progressDialog.dismiss(); 
  5.             super.handleMessage(msg); 
  6.         } 
  7.         
  8.     };
复制代码
Android还有另一种方式实现就是利用AsyncTask,主要代码如下:

  1. private class DownloadFilesTask extends AsyncTask {
  2.     @Override 
  3.     protected Void doInBackground(Void… params) { 
  4.         //耗时操作, 
  5.         try { 
  6.             Thread.sleep(4*1000); 
  7.         } catch (InterruptedException e) { 
  8.             // TODO Auto-generated catch block 
  9.             e.printStackTrace(); 
  10.         } 
  11.         return null; 
  12.     }
  13.     @Override 
  14.     protected void onPostExecute(Void result) { 
  15.         //作UI线程的修改。 
  16.         progressDialog.dismiss(); 
  17.         super.onPostExecute(result); 
  18.     }    
  19. }
复制代码
这样也实现了同样的功能,而且不需要自己新开线程。AsyncTask的详细解释见:http://developer.android.com/reference/android/os/AsyncTask.html
0 0
原创粉丝点击