您的位置:首页 > 产品设计 > UI/UE

更新UI时遇到:Only the original thread that created a view hierarchy can touch its views.

2013-07-29 10:08 459 查看
Only the original thread that created a view hierarchy can touch its views。原因是android中相关的view和控件不是线程安全的,我们必须单独做处理。我用Handler来解决。

Handler的官方描述:

A Handler allows you to send and process
Message
and
Runnable objects associated with a thread's
MessageQueue
.
Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables
to that message queue and execute them as they come out of the message queue

Handler的使用场合:

1、 to schedule messages and runnables to be executed
as some point in the future;

安排messages和runnables在将来的某个时间点执行。

2、 to enqueue an action to be performed on a different
thread than your own.

将action入队以备在一个不同的线程中执行。即可以实现线程间通信。比如当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。

我的用法是,

声明一个成员变量:private
Handler handler=null;

在onCreate()方法里:

handler=new Handler()

{

@Override

public void handleMessage(Message msg)

{

if(msg.arg1==1)

{

adapter=new MovieListAdapter(ListActivity.this,movieInfos);

gridView.setAdapter(adapter);

}

}

};

再设一个线程,调制当处理完毕数据库的操作时再去更新UI。

new Thread(new Runnable(){

@Override

public void run()

{

Message msg=handler.obtainMessage();

movieInfos=movieUtils.getMovieInfos(ListActivity.this);

msg.arg1=1;

handler.sendMessage(msg);

}

}).start();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐