需求:先彈出dialog,然后,隔一定時間,修改dialog的msg.
如果只是dismiss dialog 并不需要透過Handle
runOnUiThread 如果開啟新的定時線程,不起作用.
android的線程通訊透過handle來處理,這里也一樣
public static void showProgressDialog2(Context context, String title,
String msg, boolean cancelable, final long runtime, int iconId,
final String title2, final String msg2, final long closetime) {
final ProgressDialog mypDialog = new ProgressDialog(context);
mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //
// 设置ProgressDialog 标题
mypDialog.setTitle(title); // 设置ProgressDialog 提示信息
mypDialog.setMessage(msg); // 设置ProgressDialog 标题图标
mypDialog.setIcon(iconId); // 设置ProgressDialog 的进度条是否不明确
mypDialog.setIndeterminate(false); // 设置ProgressDialog 是否可以按退回按键取消
mypDialog.setCancelable(cancelable); // 让ProgressDialog 显示
mypDialog.show();
final Handler currentHandler = new EHandler(Looper.getMainLooper(),mypDialog);
// Activity activity = (Activity) context;
// activity.runOnUiThread(new Runnable() {// 對UI的操作放在uiThread里面
// public void run() {
// };
// });
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// mypDialog.setTitle(title2); //
// 设置ProgressDialog 提示信息
// mypDialog.setMessage(msg2);
Message msg= currentHandler.obtainMessage(1,1,1,msg2);
currentHandler.sendMessage(msg);
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mypDialog.dismiss();
}
}, closetime);
}
}, runtime);
}
static class EHandler extends Handler {
private ProgressDialog progressDialog;
public EHandler(Looper looper){
super(looper);
}
public EHandler(Looper looper, ProgressDialog dialog) {
super(looper);
progressDialog = dialog;
}
@Override
public void handleMessage(Message msg) {
progressDialog.setMessage(msg.obj.toString());
}
}
參考http://www.iteye.com/wiki/topic/667340文章,runOnUiThread 正確做法是在里面修改ui,而不能另開線程.我估計它的背后也就是利用了handle在處理.
代碼如下:
public static void showProgressDialog2(Context context, String title,
String msg, boolean cancelable, final long runtime, int iconId,
final String title2, final String msg2, final long closetime) {
final ProgressDialog mypDialog = new ProgressDialog(context);
mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); //
// 设置ProgressDialog 标题
mypDialog.setTitle(title); // 设置ProgressDialog 提示信息
mypDialog.setMessage(msg); // 设置ProgressDialog 标题图标
mypDialog.setIcon(iconId); // 设置ProgressDialog 的进度条是否不明确
mypDialog.setIndeterminate(false); // 设置ProgressDialog 是否可以按退回按键取消
mypDialog.setCancelable(cancelable); // 让ProgressDialog 显示
mypDialog.show();
// final Handler currentHandler = new
// EHandler(Looper.getMainLooper(),mypDialog);
final Activity activity = (Activity) context;
new Timer().schedule(new TimerTask() {
@Override
public void run() {
// Message msg= currentHandler.obtainMessage(1,1,1,msg2);
// currentHandler.sendMessage(msg);
// 試試用runOnUiThread方法
activity.runOnUiThread(new Runnable() {// 對UI的操作放在uiThread里面
public void run() {
mypDialog.setMessage(msg2);
mypDialog.setTitle(title2);
};
});
new Timer().schedule(new TimerTask() {
@Override
public void run() {
mypDialog.dismiss();
}
}, closetime);
}
}, runtime);
}
分享到:
相关推荐
不使用timer控件,用Invoke实现UI界面更新
Thread 达到跨线程更新UI 虽然使用Dispatcher.Invoke 和模拟winform 里面的DoEvent 但是运行中关闭还是会有异常,而且耗资源高; 第二种 : DispatcherTimer 失败:UI还是会卡顿; 第三种 : Timer 建议使用、资源...
关于winform使用timer进行多线程操作的例子 一个关于网段ping的例子 很好的解释了system.timers.timer的用法
C#多线程与UI响应
使用System.Threading.Timer 使用System.Timers.Timer 分别举例这两个类来实现多线程的时钟,不会阻塞UI线程 例子是Winform的
C#多线程定时调用,类似timer,比timer更轻量级
自己编写的Delphi组件定时器Timer,内支持线程,不会像D原生那样卡顿及界面.
1、测试调用委托时BeginInvoke和Invoke的表现差异 2、System.Timers.Timer多线程刷新界面 3、System.Threading.ThreadPool多线程刷新界面 4、System.Threading.Thread多线程刷新界面
细细品味C# (Timer及多线程编程)
CMyTimer类实现了不依赖窗口的多事件timer,多个timer事件均在一个线程中处理,重要的是使用方法和windows的WM_TIMER使用几乎一致
模拟多线程,众所周知,vb本身并不支持多线程,笨程序是利用外部API加本地Timer对多线程进行实现
用C#实现的软件启动界面(其他语言类似),采用单独的线程加载软件资源,(不同于采用两个窗体和Timer组件实现的启动界面,两个窗体的容易造成UI无法响应),避免了在主线程中加载资源造成的窗体UI无法响应,并同时...
vc 定时 时钟 timer的用法以及注意事项都有详尽描述。
提供免费下载 Timer控件定时更新UpdatePanel - DemoVS2010版.zip
visual c++ VC中TIMER与多线程的对比.zip TIMER与线程的对比:用TIMER就显慢,因为TIMER是在主线程中的,即共用一线程,用多线程就快多了
自己写的vb net定时小程序程序 可以定时关机 定时重启 定时锁定计算机 定时休眠 定时运行程序 也可以运行mp3 doc 等程序 支持多语言 支持密码保护 支持两种定时模式 支持暂停 支持缩小托盘 无需安装 下载即用 ...
本文实例讲述了C#中Forms.Timer、Timers.Timer、Threading.Timer的用法...1、基于Windows消息循环,用事件方式触发,在界面线程执行;是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事
Windows Presentation Foundation (WPF) 旨在帮助开发人员解决线程处理的难题。这样,大多数 WPF 开发人员就不必编写使用多个线程的接口。由于多线程程序很复杂且难以调试,因此只要存在单线程解决...使用Timer更新UI
1、基于Windows消息循环,用事件方式触发,在界面线程执行;是使用得比较多的Timer,Timer Start之后定时(按设定的Interval)调用挂接在Tick事件上的EvnetHandler。在这种Timer的EventHandler中可 以直接获取和修改...
java定时任务调度Timer简单示例代码 ,