错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
2011-04-15 16:14
453 查看
今天写了一个更新UI的小例子,没想到出了log打印了这样一个错误:Only the original thread that created a view hierarchy can touch its views。goolgle了一下找到了原因。
原来android中相关的view和控件不是线程安全的,我们必须单独做处理。这里借此引出Handler的使用。
Handler的官方描述:
A Handler allows you to send and process
.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线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
通过Handler更新UI实例:
步骤:
1、创建Handler对象(此处创建于主线程中便于更新UI)。
2、构建Runnable对象,在Runnable中更新界面。
3、在子线程的run方法中向UI线程post,runnable对象来更新UI。
详细代码如下:
*java线程的详细讲解链接
原来android中相关的view和控件不是线程安全的,我们必须单独做处理。这里借此引出Handler的使用。
Handler的官方描述:
A Handler allows you to send and process
Messageand 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线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
通过Handler更新UI实例:
步骤:
1、创建Handler对象(此处创建于主线程中便于更新UI)。
2、构建Runnable对象,在Runnable中更新界面。
3、在子线程的run方法中向UI线程post,runnable对象来更新UI。
详细代码如下:
package djx.android; import djx.downLoad.DownFiles; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class downLoadPractice extends Activity { private Button button_submit=null; private TextView textView=null; private String content=null; private Handler handler=null; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //创建属于主线程的handler handler=new Handler(); button_submit=(Button)findViewById(R.id.button_submit); textView=(TextView)findViewById(R.id.textView); button_submit.setOnClickListener(new submitOnClieckListener()); } //为按钮添加监听器 class submitOnClieckListener implements OnClickListener{ @Override public void onClick(View v) { //本地机器部署为服务器,从本地下载a.txt文件内容在textView上显示 final DownFiles df=new DownFiles("http://192.168.75.1:8080/downLoadServer/a.txt"); textView.setText("正在加载......"); new Thread(){ public void run(){ content=df.downLoadFiles(); handler.post(runnableUi); } }.start(); } } // 构建Runnable对象,在runnable中更新界面 Runnable runnableUi=new Runnable(){ @Override public void run() { //更新界面 textView.setText("the Content is:"+content); } }; }
*java线程的详细讲解链接
相关文章推荐
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用&用其更新UI
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- andriod 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- Only the original thread that created a view hierarchy can touch its views——Handler的使用
- Only the original thread that created a view hierarchy can touch its views——Handler的使用
- "Only the original thread that created a view hierarchy can touch its views"引发的思考_Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的深入解析
- Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的深入解析
- Android进阶——Handler的应用之解决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开发中出现Only the original thread that created a view hierarchy can touch its views.错误的解决方法
- 【Android】错误信息 Only the original thread that created a view hierarchy can touch its views
- android中出现Only the original thread that created a view hierarchy can touch its views.错误解决方案