`
java198921
  • 浏览: 709 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论
阅读更多
在Android开发中涉及UI更新时会遇到一个问题[android]android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch

也就是说必须在一般必须在程序的主线程(也就是ui)线程中进行更新界面显示的工作。可以采用下面的方法之一来解决:

  解决方案1:在Activity.onCreate(Bundle savedInstanceState)中创建一个Handler类的实例, 在这个Handler实例的handleMessage回调函数中调用更新界面显示的函数。例如:
public class ExampleActivity extends Activity {

  Handler h = null;

  @Override

  public void onCreate(Bundle savedInstanceState){

      h = new Handler(){

      @Override

          public void handleMessage(Message msg){

          // call updateGui method.

          }

      };

  }
}
  
public class ExampleActivity extends Activity {

  Handler h = null;

  @Override

  public void onCreate(Bundle savedInstanceState){

      h = new Handler(){

          @Override
          public void handleMessage(Message msg){

          // call updateGui method.

          }

      };

  }
}

在其它的函数中,利用 send族或post族函数向这个h发送或邮寄消息即可。
把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。 这样Runnable对像就能在ui程序中被调用。

我在解决这个问题时采用的是第二种的解决方案
this.runOnUiThread(
    new Runnable(){
        public void run(){
            mWebView.loadUrl("javascript:getFromJson()");
        }
    }
);

这样有效地解决线程阻塞的问题。

参考 http://www.cnmsdn.com/html/201009/1284080180ID7930.html
分享到:
评论

相关推荐

    Android广播onReceiver回调更新ui

    在主线程(UI线程)中更新UI,确保操作的顺利进行。 5. **测试广播接收器**: 文件名为"testbroadcast"可能是一个用于测试广播接收器的类或项目。测试广播接收器通常包括模拟发送广播意图和验证接收器是否正确响应...

    Xamarin.Android 非UI线程更新UI

    在Xamarin.Android开发中,非UI线程更新UI是一个常见的需求,但同时也涉及到线程安全问题。本篇文章将深入探讨如何在Xamarin.Android环境中正确地从非UI线程(也称为后台线程)更新用户界面。 首先,我们需要理解...

    通过Messenger实现Android Service更新UI

    本篇将详细介绍如何通过Messenger实现在Service中更新UI。 首先,理解Messenger的核心概念。Messenger是一个轻量级的消息传递对象,用于在不同的线程或者进程中传递消息。它是基于 Binder 的,因此可以跨越进程边界...

    Android间隔1秒更新UI的4种方法

    在Android开发中,更新UI是常见的操作,尤其是在需要实时显示数据变化或动画效果时。本文将详细介绍四种在Android中实现1秒间隔更新UI的方法。这四种方法分别是:Handler、Runnable、TimerTask和CountDownTimer。每...

    android systemUI 学习资料

    Android SystemUI 是 Android 系统中负责管理系统界面的组件,包括状态栏、导航栏、快捷设置等。SystemUI 的作用非常重要,因为它是用户与 Android 系统交互的入口。 SystemUI 的组成部分包括: 1. StatusBar...

    老罗Android开发视频教程-Android常用UI控件编程【32集】

    教程名称: 老罗Android开发视频教程-Android常用UI控件编程【32集】【】Android常用UI控件编程第七集【】Android常用UI控件编程第二十三集【】Android常用UI控件编程第二十九集【】Android常用UI控件编程第二十二...

    Android绘制UI 工具

    在Android开发中,UI设计是至关重要的一步,它直接影响到应用程序的用户体验和视觉吸引力。"Android绘制UI工具"就是一种帮助开发者快速、便捷地创建和设计用户界面的工具。这个工具能够自动生成代码,简化了将设计...

    QQUI android QQUI

    在UI设计中,美观不仅体现在色彩搭配上,还在于布局的合理性、图标的设计以及整体风格的一致性。QQUI模仿了QQ的界面,但在此基础上进行了创新,以更符合现代审美的方式呈现。它可能采用了扁平化设计,去除了过多的...

    利用Handler来更新android的UI

    总结,`Handler`是Android中更新UI的重要工具,它与`Looper`和`MessageQueue`配合工作,保证了UI操作在主线程中执行。理解和熟练使用`Handler`,能够帮助开发者更好地实现异步操作和UI更新,提高应用的用户体验。...

    Android新手UI集合全

    PNG图标在Android UI中扮演着重要角色。它们通常用于表示菜单项、操作按钮或者状态指示器等。Android支持多种图标的类型,如Action Bar图标、启动图标、状态栏图标等,每种都有其特定的尺寸和风格指南。例如,启动...

    更新UI android

    在Android开发中,更新UI(用户界面)是常见的任务,特别是在长时间运行的操作或者后台服务中。本教程将探讨如何利用BroadcastReceiver、Service和线程来实现在Android应用中有效地更新UI。以下是对这些知识点的详细...

    Android的线程使用来更新UI

    为了解决这个问题,Android提供了多种线程管理机制,使得开发者能够在后台线程中执行耗时任务,而将UI更新操作放在主线程中进行。下面将详细探讨Android线程的使用以及如何在后台线程中处理数据并更新UI。 1. 主线...

    Android8.1 SystemUI源码

    在Android系统中,SystemUI是用户界面的核心组成部分,它负责管理状态栏、通知中心、快速设置等关键功能。本文将深入探讨Android 8.1版本的SystemUI源码,介绍其结构、工作原理以及如何利用提供的gradle配置进行开发...

    Android_UI_API最全中文文档

    Android_UI_API中文文档是Android开发中的一个重要组件,提供了丰富的UI控件和API接口,供开发者使用。下面我们将对Android_UI_API中文文档中的重要知识点进行总结和解释。 一、TextView TextView是Android中最...

    android 更新 UI 线程 handler

    为了解决这个问题,Android引入了Handler机制,配合Runnable对象来安全地在主线程中更新UI。以下将详细讲解这个过程。 首先,我们需要理解Android的线程模型。Android应用主要由主线程和工作线程组成。主线程负责...

    android 雷达UI设计

    在Android平台上,雷达UI设计是一种独特且引人注目的用户界面设计方式,它通常用于展示数据分布、位置追踪、分析以及游戏中的导航等场景。雷达图(也称为蜘蛛图或星形图)以其多轴、多维度的特性,能够有效地可视化...

    原生android SystemUI源码

    在Android 4.0(Ice Cream Sandwich,简称ICS)版本中,SystemUI组件负责了状态栏、通知中心、快速设置面板等用户界面元素的显示与交互。 SystemUI主要包含以下几个关键组件: 1. **StatusBar**: 状态栏是Android...

    Android Handler定时更新UI

    Handler会被用来在主线程中更新显示的计数值,而Runnable则负责计算并更新计数值。通过这种方式,我们可以在不阻塞主线程的情况下,实现定时UI更新。 此外,还可以结合使用AlarmManager或者CountDownTimer等其他...

Global site tag (gtag.js) - Google Analytics