错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
来源:互联网 发布:java开发月收入1.5万 编辑:程序博客网 时间:2024/05/20 15:58
今天写了一个更新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 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线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
通过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的使用
- 错误: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错误解决
- 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错误解决
- 报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错误相关
- 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的相关
- sharepoint 2013 更换内容数据库方法
- 安装Confluence和JIRA使用SQLServer时数据库的排序规则
- 网络请求框架---Volley
- Oracle form builder 中文乱码,出现“靠”
- SecureCRT无法登录Ubuntu
- 错误:Only the original thread that created a view hierarchy can touch its views——Handler的使用
- 为什么Java程序占用的内存比实际分配给它的要多
- ubuntu 疑难解决<新手>
- Kettle 4.2源码分析第四讲--KettleJob机制与Database插件简介(含讲解PPT)
- LeetCode刷题笔录Longest Common Prefix
- Java几款性能分析工具的对比
- java基础知识之构造函数
- 【两类dfs总结】 Restore IP Addresses、Word Search、Subsets、带重复的全排列
- 让你容貌越来越好的秘诀