- 浏览: 126950 次
- 性别:
- 来自: 福州
文章分类
最新评论
-
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
关于anroid设置webview背景方法探讨 -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
http://m.qianka.com/shoutu?u=21 ...
android ScrollView 与listView共存冲突问题解决方法(附图) -
zhangyang5023637:
讲的挺明白的。
android中的webview 加载html,并可以实现java调用js -
JavaEEdyc:
android中的webview 加载html,并可以实现ja ...
关于anroid设置webview背景方法探讨
Handler Only the original thread that created a view hierarchy can touch its vi
- 博客分类:
- android
错误例子:这里使用的Barprogress 在结束后就会报异常,因为我们把控件放在了子线程中了。
package com.funo.cicerone;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class HandlerActivity extends Activity {
private TextView text = null;
private Button button = null;
private ProgressBar bar = null;
private MyHandler myHandler;
private MyThread m = new MyThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handle_activity);
text = (TextView) findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
bar = (ProgressBar) findViewById(R.id.bar);
bar.setMax(100);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myHandler = new MyHandler();
new Thread(m).start();
System.out.println("onCreate--The Thread is: "
+ Thread.currentThread().getId());
}
});
}
// 执行接收到的通知,此时执行的顺序是按照队列进行,即先进先出
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper l) {
super(l);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("Handler--The ThreadId is: "
+ Thread.currentThread().getId());
Bundle b = msg.getData();
String textStr1 = text.getText().toString();
String textStr2 = b.getString("textStr");
System.out.println(textStr1 + "..." + textStr2 + ".......");
HandlerActivity.this.text.setText(textStr1 + " " + textStr2);// 更改TextView中的值
int barValue = b.getInt("barValue");
System.out.println(barValue + "....barValue...");
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
System.out.println(msg.what + "...msg.what...");
super.handleMessage(msg);
}
}
class MyThread implements Runnable {
int i = 1;
@Override
public void run() {
// TODO Auto-generated method stub
while (i < 11) {
System.out.println("Thread--The ThreadId is: "
+ Thread.currentThread().getId());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle b = new Bundle();
b.putString("textStr", "线程运行" + i + "次");
b.putInt("barValue", i * 10);
i++;
msg.setData(b);
HandlerActivity.this.myHandler.sendMessage(msg);// 通过sendMessage向Handler发送更新UI的消息
}
//在这里要消除ProgressBar 会报异常。
bar.setVisibility(View.GONE);
}
}
}
异常:
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): FATAL EXCEPTION: Thread-8
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.ViewRoot.checkThread(ViewRoot.java:2802)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.ViewRoot.requestLayout(ViewRoot.java:594)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.requestLayout(View.java:8125)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.setFlags(View.java:4501)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.view.View.setVisibility(View.java:3030)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at android.widget.ProgressBar.setVisibility(ProgressBar.java:767)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at com.funo.cicerone.HandlerActivity$MyThread.run(HandlerActivity.java:144)
03-16 09:32:32.314: ERROR/AndroidRuntime(21751): at java.lang.Thread.run(Thread.java:1096)
改进下:
package com.funo.cicerone;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
public class HandlerActivity extends Activity {
private TextView text = null;
private Button button = null;
private ProgressBar bar = null;
private MyHandler myHandler;
private MyThread m = new MyThread();
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.handle_activity);
text = (TextView) findViewById(R.id.text);
button = (Button) findViewById(R.id.button);
bar = (ProgressBar) findViewById(R.id.bar);
bar.setMax(100);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
myHandler = new MyHandler();
new Thread(m).start();
System.out.println("onCreate--The Thread is: "
+ Thread.currentThread().getId());
}
});
}
// 执行接收到的通知,此时执行的顺序是按照队列进行,即先进先出
class MyHandler extends Handler {
public MyHandler() {
}
public MyHandler(Looper l) {
super(l);
}
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
System.out.println("Handler--The ThreadId is: "
+ Thread.currentThread().getId());
Bundle b = msg.getData();
String textStr1 = text.getText().toString();
String textStr2 = b.getString("textStr");
System.out.println(textStr1 + "..." + textStr2 + ".......");
HandlerActivity.this.text.setText(textStr1 + " " + textStr2);// 更改TextView中的值
int barValue = b.getInt("barValue");
System.out.println(barValue + "....barValue...");
System.out.println(msg.what + "...msg.what...");
switch (barValue) {
case 10:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 20:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 30:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 40:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 50:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 60:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 70:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 80:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 90:
HandlerActivity.this.bar.setProgress(barValue);// 更改进度条当中的值
break;
case 100:
HandlerActivity.this.bar.setVisibility(View.INVISIBLE);
}
super.handleMessage(msg);
}
}
class MyThread implements Runnable {
int i = 1;
@Override
public void run() {
// TODO Auto-generated method stub
while (i < 11) {
System.out.println("Thread--The ThreadId is: "
+ Thread.currentThread().getId());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message msg = new Message();
Bundle b = new Bundle();
b.putString("textStr", "线程运行" + i + "次");
b.putInt("barValue", i * 10);
i++;
msg.setData(b);
HandlerActivity.this.myHandler.sendMessage(msg);// 通过sendMessage向Handler发送更新UI的消息
}
// bar.setVisibility(View.GONE);
}
}
}
发表评论
-
android微信摇一摇功能
2014-12-12 14:22 1643直接看代码 1:配置文件activity_main.xml & ... -
Android 返回键连续点击两次退出应用
2014-12-11 11:06 8776返回键连续点击两次退出应用,一般大家都是使用时间差来实现功能, ... -
android中getX(),getY() 与getRawX(),getRawY()分析
2014-12-09 12:13 3706[b]先看getX(),getY()源码解释 /** ... -
android ScrollView 与listView共存冲突问题解决方法(附图)
2013-05-12 16:18 8046[list] [*] [size=medium] 最近因 ... -
关于anroid设置webview背景方法探讨
2012-11-01 11:33 19788[b]最近的项目中一直关于webView设置背景色问题在研究, ... -
html5在android搭建滚动条
2012-04-26 23:33 3408最近的项目中出现类似IOS滚动条的效果。我们知道在html 中 ... -
css,img,url
2012-04-26 23:12 1966最近在做html5 android手机客户的开发,一个很简单的 ... -
HTML5和android等开发平台的使用及搭建环境
2012-04-23 00:05 1652对HTML5期待很久了,今天有时间也有机会接触一下了,和以前的 ... -
android webview WebViewClient
2012-04-17 23:33 3463最近两天一直在做一个网页连续测试的例子,循环统计各个页面的从向 ... -
android 面试题
2012-03-14 23:07 2204什么是Activity? 请描述一下Activ ... -
android webService
2012-03-14 22:43 1332找到几篇在android中使用webservice的文章,觉得 ... -
SharedPreferences
2012-03-09 12:42 2054今天做了对SharedPreferences做了简单的测试,并 ... -
JSONObject JSONARRAY
2012-03-04 00:38 35821.最近做的一个项目中传递的数据类型是Json格式的,所以在封 ... -
youmi移动广告平台
2012-03-02 21:57 1394前段时间,对智能手机投送广告做了一个简单测试。 其实,对于这些 ... -
android 关于图片的放大,缩小,旋转功能的实现(附源码)
2012-03-02 20:51 5211package funo.com.test; import ... -
android应用UI和用户体验
2012-03-02 20:37 799Android应用UI设计和用户体验的10个要点 随着移动 ... -
android listView
2011-12-03 16:18 779在android开发中ListView是比较常用的组件,它 ...
相关推荐
Only the original thread that created a view hierarchy can touch its views 这句话的意思是:只有创建这个view的线程才能操作这个view 解决方法就是handle 1、 Handler mHandler; 2、 mHandler = new Handler();...
2.android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 3.java.lang.RuntimeException: Can't create handler inside thread ...
本文实例讲述了Android实现在子线程中更新Activity中...ERROR/AndroidRuntime(1222): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its
例如在子线程进行耗时较长的下载,等下载完成之后,再去更新UI,提示用户下载完成,直接在子线程里更新UI,会得到报错提示:Only the original thread that created a view hierarchy can touch its views。...
如果在非UI线程中直接修改UI元素,系统会抛出`Android.Content.ReceiverNotRegisteredException`或`Java.Lang.RuntimeException: Only the original thread that created a view hierarchy can touch its views.`...
System.out.println("Handler-->"+Thread.currentThread().getName()); } }; @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if ...
如果是在 WT 进行 UI 的更新,则会抛出异常,android.view.ViewRoot$CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views。 Android UI 更新的方法有多种...
前两种方法在更新 UI 时,如果不使用消息处理机制的话,会报错,例如 "Only the original thread that created a view hierarchy can touch its views."(只能在主线程中更新 UI)。因此,在使用延时操作时,推荐...
在Android开发中,`android.view.ViewRootImpl$CalledFromWrongThreadException` 是一个常见的异常,它通常发生在尝试在非UI线程(主线程)中修改用户界面元素时。这个异常表明,只有创建视图的原始线程(即主线程)...
在Android应用开发中,Handler、Thread和Looper是三个至关重要的组件,它们共同构成了Android线程间通信的基础架构。本文将详细解析这三个概念及其相互关系,旨在帮助开发者理解它们的工作原理和实际应用场景。 ...
在Android应用开发中,`Handler` 和 `Thread` 是两个非常关键的概念,它们主要用于处理线程间的通信和异步操作。下面将详细解释这两个概念,以及如何在实际应用中使用它们来实现简单的网络图片获取和显示。 首先,`...
在Android开发中,`Service`、`Thread`、`Toast`和`Handler`是四个非常重要的组件和概念,它们在创建高效、响应式的应用程序中起着关键作用。下面将详细阐述这些知识点及其相互关系。 首先,`Service`是Android中的...
在Android开发中,`Thread` 和 `Handler` 是两个非常重要的概念,它们是实现多线程通信的关键工具。本文将详细解析如何在`Thread`中使用`Handler`来修改主线程(UI线程)的数据或者更新UI。 首先,我们要了解`...
在Android开发中,Thread和Handler是两个非常关键的概念,它们用于处理线程间通信和UI更新,确保程序的运行效率和用户体验。这篇博客主要探讨了如何有效地使用Thread和Handler进行多线程操作。 首先,Thread在Java...
本项目"Thread_Handler_MessageDownload"着重探讨了如何利用Thread、Handler和Message机制实现异步下载网络图片,确保UI线程不被阻塞,提高应用的响应速度。 首先,我们需要了解Android系统对线程的管理。在Android...
在Android应用开发中,线程(Thread)和Handler是实现多任务并行处理以及界面更新的关键组件。Android系统是一个单线程模型,主线程(UI线程)负责处理用户交互和绘制界面,而其他工作通常需要在后台线程中执行,以...
本篇文章将详细探讨两种常见的异步处理方式:`AsyncTask`和`Thread`配合`Handler`,并进行对比分析。 `AsyncTask`是Android SDK提供的一种轻量级的异步任务处理机制,它主要用于短时间的后台操作,如网络请求、数据...
such as how to write a message handler with ClassWizard, I thereafter let the source code do the talking and assume that you can figure out how the source code was created. Keep in mind that the ...