最近在网上看到了一个关于dialogprogress的文章,就是带进度条的对话框。
里面段代码这样写的:
final ProgressDialog pd2=new ProgressDialog(this);
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd2.setIcon(R.drawable.png0075);
pd2.setMax(100);
pd2.setProgress(0);
pd2.setIndeterminate(false);
pd2.setCancelable(true);
pd2.setButton("YES",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
new Thread(){
public void run(){
try{
while(mcount<=100){
pd2.setProgress(mcount++);
Thread.sleep(100);
}
pd2.cancel();
}catch(Exception ex){
pd2.cancel();
}
}
}.start();
pd2.show();
我以前看到过说是其它线程都不能直接修改控件,要使用handler才行。
但为什么这里的新线程里面它就直接调用用主线程的控件方法了pd2.setProgress(mcount++);这一句.
我试了一下,还没报错,这是怎么回事,请高手解释?
里面段代码这样写的:
final ProgressDialog pd2=new ProgressDialog(this);
pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd2.setIcon(R.drawable.png0075);
pd2.setMax(100);
pd2.setProgress(0);
pd2.setIndeterminate(false);
pd2.setCancelable(true);
pd2.setButton("YES",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
new Thread(){
public void run(){
try{
while(mcount<=100){
pd2.setProgress(mcount++);
Thread.sleep(100);
}
pd2.cancel();
}catch(Exception ex){
pd2.cancel();
}
}
}.start();
pd2.show();
我以前看到过说是其它线程都不能直接修改控件,要使用handler才行。
但为什么这里的新线程里面它就直接调用用主线程的控件方法了pd2.setProgress(mcount++);这一句.
我试了一下,还没报错,这是怎么回事,请高手解释?
解决方案 »
- 装android插件plugin时遇到的问题
- Android无法读取SD卡中名字太长的文件疑问
- 编译源码:find: `frameworks/base/frameworks/base/docs/html': 没有那个文件或目录
- adb reboot后data/system/wallpaper_info.xml文件被改
- google GMS包的问题
- 自定义ScrollView后,使用onDraw里面的canvas进行绘图后导致ScrollView无法滚动。
- android生命周期的问题
- 打印中:dalvikvm的CM_os_trap_call_glue是啥意思?
- so文件里fread读取数据失败?
- 做APN开关是遇到问题
- android中通过SmsManager发短信机制是什么
- ImageSwitcher切换长宽比例不同的图片时不上下左右居中?
if (mHasStarted) {
mProgress.setProgress(value);
onProgressChanged();
} else {
mProgressVal = value;
}
}
private void onProgressChanged() {
if (mProgressStyle == STYLE_HORIZONTAL) {
mViewUpdateHandler.sendEmptyMessage(0);
}
}
这样是不是说progressdialog都可直接在任何线程中修改?