Android延时加载两种方式

发中如果涉及到了比较耗时的工作,之前做法是利用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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值