Android Processdialog 用法

  • 为了安抚用户等待的焦急心情,我们用ProgressDialog。它的用法书上有例子,就是:   
  • ProgressDialog myDialog = ProgressDialog.show(YourClass.this"正在连接服务器..""连接中,请稍后.."truetrue);   
  • handler.post(mTasks);   
  • 它的用法一般都是在用intent开启一个新的activity的时候,你直接加上这句话,是达不到你想要的效果的。   
  • 你必须这样用:把用intent开启activity的这件事放在一个Runnable对象的run()方法中,然后用handler.post()方法来运行这个线程。   
  • 代码如下:   
  • Handler handler = new Handler();   
  • Runnable mTasks = new Runnable() {   
  •   public void run() {   
  •     Intent intent = new Intent();   
  •     intent.setClass(YourClass .this,EditHome.class);   
  •     startActivity(intent);   
  •    }   
  • };   
  • final ProgressDialog myDialog = ProgressDialog.show(YourClass.this"正在连接服务器..""连接中,请稍后.."truetrue);   
  • handler.post(mTasks);   
  •   
  • 这样算是达到我们要的效果了,可是,那个ProgressDialog的窗口并没有关闭,所以后面还要加上myDialog.dismiss();   
  • 但这样的话,窗口出来就消失,我们又看不到ProgressDialog了...所以,我们要用一个线程来控制窗口消失的时间:   
  •   
  • new Thread() {   
  •    public void run() {   
  •      try{   
  •        sleep(5000);   
  •      }catch(InterruptedException e){   
  •          e.printStackTrace();   
  •      }   
  •      myDialog.dismiss();   
  •    }}.start();   
  •   
  • 那个sleep的时间是你估算下一个activity显示出来所需要的时间。OK了。   
  • 但显然这样做是不科学的。科学的做法是:首先在原avtivity中添加一个关闭Dialog的静态方法:   
  •   
  • public static void closeProgressDialog() {   
  •    myDialog.dismiss();   
  • }   
  •   
  • 然后在目标的activity中添加两个成员变量:   
  •   
  • private static final int EVENT_TIME_TO_CHANGE_IMAGE = 100;   
  • private Handler mHandler = new Handler() {   
  • public void handleMessage(Message msg) {   
  •       switch(msg.what){   
  •         case EVENT_TIME_TO_CHANGE_IMAGE:   
  •              YourPrimaryClass.closeProgressDialog();   
  •         break;   
  •      }   
  • }};   
  •   
  • 其中Handler中注册了关闭窗口的条件和关闭动作(调用静态方法)。然后在这个activity的onCreat()方法里的最后面加上发送消息的代码:   
  • Message message = mHandler.obtainMessage(EVENT_TIME_TO_CHANGE_IMAGE);   
  • mHandler.sendMessage(message);   
  • 这样就能保证是在目标activity全部显现出来之后关闭那个progressDialog了。 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文给大家一个简单实用的方法通过创建一个线程而不是服务的方式来解决耗时操作时的假死或等待。

在一个名为Hedalixin的Activity中,我们通过一个进度条控件ProgressDialog可以处理很多耗时操作。代码如下

 

    1. final ProgressDialog dialog = ProgressDialog.show(Hedalixin.this"标题""正文"true);     
    2. final Handler handler = new Handler() {     
    3.    public void handleMessage(Message msg) {     
    4.       dialog.dismiss();   //关闭progressdialog   
    5.       }     
    6.    };     
    7.   
    8. Thread testThread = new Thread() {       
    9.    public void run() {     
    10.   
    11.      //这里处理耗时操作,比如文件下载等等。   
    12.    
    13.       handler.sendEmptyMessage(0);    //告诉handler   
    14.       }     
    15.    };     
    16. testThread.start();    

转载于:https://www.cnblogs.com/gzhnan/articles/3479922.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值