这种异常出现在子线程中处理UI操作产生的异常,将UI操作放在主线程中就OK了…
今天在项目中要使用圆角头像,导入开源 CircleImageView ,然后setImageBitmap()时 运行时就会发现,它会报一个致命性的异常:: · ERROR/AndroidRuntime(421): FATAL EXCEPTION: Thread-8 · ERROR/AndroidRuntime(421): android.view.ViewRoot$CalledFromWrongThreadException: · Only the original thread that cr…
在分析Android消息机制之前,我们先来看一段代码: public class MainActivity extends Activity implements View.OnClickListener { private TextView stateText; private Button btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); s…
这周操作系统作业布置了一个作业,内容是做个小软件,来模拟消费者生产者问题,作业实现起来不来,因为之前写过这个算法,所以关键步骤就是在消费和生产的时候更新缓存区的UI控件就行,之后问题就来了,出现了标题中的问题,现在分析一下 Only the original thread that created a view hierarchy can touch its views 这句话的意思是,只有创建这个view的原始线程才能接触到它,意思就是我UI控件的更新不在原始线程里面,我源码这样的 //Pro…
在跟随教程学习到显示web页面的html源码时报错:Only the original thread that created a view hierarchy can touch its views,通过网上查找资料得知: android中相关的view和控件不是线程安全的,必须单独做处理.如果要更新视图,必须在主线程中更新,不可以在子线程中执行更新的操作. 既然这样,我们就可以通过Handler对象实现对UI的更新.  Handler的官方描述: A Handler allows you t…
在调试软件的时候出现如下的错误: 01-05 20:53:36.492: E/ZZShip(2043): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 又是一个ThreadException,之前也碰到过. 解决方法: private Handler mHandler = ne…
最近自己再写一个小项目练手,创建一个线程从网络获取数据然后显示在 recyclerView 上.写好后发现页面能够显示,但是有时候会把请求的数据显示过来,有时候不会.点开 android monitor 一看,有一个提示 : Only the original thread that created a view hierarchy can touch its views. 异常的意思是说只有创建这个view的线程才能操作这个 view,普通会认为是将view创建在非UI线程中才会出现这个错误.…
目录 1.异常出处 2.从View.invalidate()方法开始分析 3.ViewRootImpl如何与View进行关联:从Activity的setContentView开始分析 3.1 最顶层的View--DecorView 3.2 DecorView与ViewRootImpl进行关联 4.其他 4.1 获取DecorView与ViewRootImpl的直接方法 4.2 硬件加速相关以及invalidate()流程图 4.3 View加载线程问题 备注:本文基于sdk28, ViewAct…
package com.example.yanlei.myapplication; import android.media.MediaMetadataRetriever; import android.media.MediaPlayer; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.app.Activity; import android.content.In…
这个主要总是,开启的线程和 UI 线程(主线程)不是同一个线程.可以Runnable方式避免,如下例所示就可以解决这个问题了. public static void updateText(Activity act, resID) { loadingText = (TextView) activity.findViewById(R.id.loadingScreenTextView); act.runOnUiThread(new Runnable() { public void run() { lo…