在onCreate里面:
((Button) findViewById(R.id.bt2)).setOnClickListener(new Button.OnClickListener(){
private ProgressDialog dlg;
@Override
public void onClick(View v) {
dlg = new ProgressDialog(eg_04_24.this);
dlg.setProgressStyle(...);
dlg....;
dlg.show(); new Thread() {
int count = 0;
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(count++ < 100) {
dlg.setProgress(count);
Thread.sleep(100);
}
}
catch(InterruptedException e) {
}
}
}.start();
}
});问题有:
一、在工作线程中不可操作主线程的UI,那么上面的dlg.setProgress(count);算不算?
二、听说在工作线程中操作主线程UI,会有异常,可是上面并没有异常?
三、谁能给“在工作线程中操作主线程UI”下个定义,比如上面的setProgress是操作UI吗?一般性判定原则是什么?
四、难道“在工作线程中操作主线程非UI”就可以吗?我觉得也可能有问题啊。在windows下面,只要是多线程访问数据,就会有问题,为什么在android下面,就只有UI操作才有问题呢?
记得hashtable和hashmap的区别就是在多线程互斥上面,那么说明多线程访问数据也是存在互斥问题的。
既然多线程访问任何东西都有问题,那么又何必强调,在线程中操作主线程UI的问题呢?
((Button) findViewById(R.id.bt2)).setOnClickListener(new Button.OnClickListener(){
private ProgressDialog dlg;
@Override
public void onClick(View v) {
dlg = new ProgressDialog(eg_04_24.this);
dlg.setProgressStyle(...);
dlg....;
dlg.show(); new Thread() {
int count = 0;
@Override
public void run() {
// TODO Auto-generated method stub
try {
while(count++ < 100) {
dlg.setProgress(count);
Thread.sleep(100);
}
}
catch(InterruptedException e) {
}
}
}.start();
}
});问题有:
一、在工作线程中不可操作主线程的UI,那么上面的dlg.setProgress(count);算不算?
二、听说在工作线程中操作主线程UI,会有异常,可是上面并没有异常?
三、谁能给“在工作线程中操作主线程UI”下个定义,比如上面的setProgress是操作UI吗?一般性判定原则是什么?
四、难道“在工作线程中操作主线程非UI”就可以吗?我觉得也可能有问题啊。在windows下面,只要是多线程访问数据,就会有问题,为什么在android下面,就只有UI操作才有问题呢?
记得hashtable和hashmap的区别就是在多线程互斥上面,那么说明多线程访问数据也是存在互斥问题的。
既然多线程访问任何东西都有问题,那么又何必强调,在线程中操作主线程UI的问题呢?
解决方案 »
- 安卓新手问题
- 求救~~~~~ 太奇怪了 listFiles为什么返回null??
- 关于广播接收后处理问题
- 为什么contentprovider中的getType需要返回MIME呢
- 关于New一个对象的问题!!??
- 关于android上传图片的问题。急急急!!!!!!!!!!!!!
- 如何在没有EditText控件的情况下打开软键盘并获得输入内容
- eclipse集成ndk找不到jni.h
- android-async-http框架的例子怎么导入工具运行
- android动画animation的问题,求大神救命啊~~~
- ????qiu jieshi
- 在android里,为什么每个process里又要有个Dalvik VM intance? (急)
1,首先在主线程里做如下声明;
//生成一个handlerThread类对象
HandlerThread handlerThread = new HandlerThread("handler_thread");
//在使用HandlerThread的getLooper()方法之前,必须先调用该类的start();
handlerThread.start();
MyHandler myHandler = new MyHandler(handlerThread.getLooper());
Message msg = myHandler.obtainMessage();
//将msg发送到目标对象,所谓的目标对象,就是生成该msg对象的handler对象
msg.sendToTarget();2,然后建立一个继承Handler的MyHandler类:
class MyHandler extends Handler{
public MyHandler(){ }
public MyHandler(Looper looper){
super(looper);
}
@Override
public void handleMessage(Message msg) {
//耗时的复杂操作代码}
如果添加Synchronized关键字做同步操作的话,那如果需要同时做操作的话,又怎么办喃?