更新UI时遇到:Only the original thread that created a view hierarchy can touch its views.
Only the original thread that created a view hierarchy can touch its views。原因是android中相关的view和控件不是线程安全的,我们必须单独做处理。我用Handler来解决。
Handler的官方描述:
A Handler allows you to send and processMessage
and Runnable objects associated with a thread'sMessageQueue
. 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();
更多相关文章
- Android异步线程与Bundle消息传递
- Android(安卓)常用技术框架的基本使用
- Android(安卓)Studio——Message
- Android(安卓)利用soap协议与服务端进行通信
- android用户界面之GridView教程实例汇总
- Android(安卓)Webkit简单用例
- 【Android(安卓)开发教程】使用Intent发送短信
- 8.Swift openURL
- Android中横竖屏切换时Activity的生命周期