android重绘UI Only the original thread that created
   是这样的,我公司给第三方手游的SDK,里面提供了登录和注册的弹窗,

注册的时候发送验证码到手机后,通过发送Handler更改UI,实现倒计时效果。
然后还是出现这个问题了图片说明
如图所示:
我将所有的进程ID和进程名都打出来了结果View的生成和更改都是在主线程里面的结果还是出现问题了__

0

2个回答

所有的view都是属于viewrootimpl对象管理的,所以viewrootimpl对象在哪个线程,那么只有这个线程可以访问更新ui。viewrootimpl对象是在
调用windowmanage的addwindow的时候创建的,我们知道主线程是在setcontentview的时候会调用addwindow,所以多数情况下,主线程会有一个
viewrootimpl对象来管理主线程下的所有view。但是并不是只有主线程才有viewrootimpl,只有你在其它线程里调用了addwindow,那么其它线程也会
有viewrootimpl对象,该线程下的view也只有该线程可以更新,主线程是无法更新的。如果你确定,出问题的这个textview你是在主线程里更新的话,它
报这个错误就表面它不是主线程的view,是其它某个线程的,所以主线程里更新是会报错的。另外一点,你打的log看你用的是pid,不知道你打的是不是
进程id,如果是进程id的话,说明不了问题,要打线程id才能知道是不是主线程的。看不到代码,只能给这些分析。

1
stone_you
stone_you 回复sakura_bean: 有问题一起讨论学习
一年多之前 回复
sakura_bean
sakura_bean 有问题我能继续问你吗
一年多之前 回复
sakura_bean
sakura_bean 谢了,我去看看线程id
一年多之前 回复

检查下代码吧,感觉可能是在子线程操作了ui。另外上面的日志不也是打印出了报名,为啥后面要抹黑掉

0
sakura_bean
sakura_bean 回复一条特立独行的咸鱼: 总共3个log第一个是弹出Dialog的线程,最后一个就是改UI前打印的3个都是一样的
一年多之前 回复
qdlgjsj345
一条特立独行的咸鱼 回复sakura_bean: 没看出来是主线程
一年多之前 回复
sakura_bean
sakura_bean 线程名都打印出来了,不应该是子线程
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
android重绘UI Only the original thread that created
是这样的,我公司给第三方手游的SDK,里面提供了登录和注册的弹窗,n注册的时候发送验证码到手机后,通过发送Handler更改UI,实现倒计时效果。n然后还是出现这个问题了![图片说明](https://img-ask.csdn.net/upload/201801/17/1516171915_379984.png)n如图所示:n我将所有的进程ID和进程名都打出来了结果View的生成和更改都是在主线程里面的结果还是出现问题了__
Handler: 更新UI的方法
总是感觉 android 中 UI 更新很让人纠结!自己小结一下,算是抛砖引玉。 读这篇文章之前,假设你已经明白线程、Handler 的使用。 在文章的最后,附录一张草图,主要用于说明 Handler、Message、MessageQueue、Looper 之间的关系。 1. 在 onCreate() 方法中开启线程更新 UI public class MasterActivity ex...
Android中更新UI的两种方法
在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面 显示常会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch i...
Android子线程其实也可以刷新UI。。。。
如果你在网上搜索CalledFromWrongThreadException:Only the original thread that created a view hierarchy can touch its views. 那么你肯定能看到很多文章说android里子线程不能刷新UI。这句话不能说错,只是有些不太严谨。其实线程能否刷新UI的关键在于ViewRoot是否属于该线程。 让我
Xamarin.Android 使用线程无法更改页面文本问题

 前言:   刚接触Xamarin.Android不到一个月时间,却被他折磨的不要不要的,随着开发会出现莫名其妙的问题,网上类似Xamarin.Android的文档也不多,于是本片文章是按照Java开发Android的思路写过来的,于是记录下来,希望大家碰到这个问题少走些弯路。 问题描述:   在执行线程内想给TextView赋值发生错误。  错误提示:   And...
android-如何在子线程中更新ui
正如我们知道的,android是不让在子线程中更新ui的。在子线程中更新ui会直接抛出异常 Only the original thread that created a view hierarchy can touch its views 那么这种检查机制在什么时候发生的呢? 那么真的不能在子线程中更新ui么?我们带着这个疑问来看一下系统代码 我们知道android中的view的更新(大小,位置,
使SwipeRefreshLayout可以上拉加载更多
这两天刚刚上班,忙里偷闲的改写了一下android.support.v4.widget.SwipeRefreshLayout类,使其可以上拉加载更多数据。其中对 android.support.v7.widget.RecyclerView支持更好一些,当然也支持listview。 这次我也终于有机会能做一个有用的项目供大家使用,以前总是使用别人的开源项目。如果对程序有疑问可以发邮件到
Android进阶——自定义View之WindowManager概述及利用WindowManager实现悬浮所有界面之上的悬浮窗Floating View(一)
引言 悬浮窗相信大家都不陌生,比如各种手机管理软件上的加速球,视频应用的小窗,可以以很少的空间换来较高的用户体验。记得我最初接触到悬浮窗就是流氓卫士的加速球,反编译后发现里面有个FloatingView的东西,初学的时候还以为是系统自带的控件,后来才知道本质上就是利用WindowManager.addView实现的,一定程度上来说实现并不难,复杂之处在于适配各种ROM 获取悬浮窗权限。 一、Win...
安卓探究ListView+Adapter数据在工作线程中更新引发的crash以及解决方法(二)
第二部分 补充分析一下AdapterDataSetObserver.onChanged()以及Adapter.notifyDataSetChanged()   前面的分析遗留了一个问题——AdapterDataSetObserver.onChanged()的分析。在这从Adapter.notifyDataSetChanged()入手分析。   Adapter提供了方法notifyDataS
《android framework常用api源码分析》之AsyncTask异步任务
AsyncTask是使用非常方便的一个类,经常用于网络请求之后的ui更新。其原理是使用线程池执行futuretask完毕后调用handler机制更新ui。由于线程池是全局单例模式,而且是设定了同时执行线程数量只有一个,所以AsyncTask是按照顺序执行后台线程并且更新ui的。这是AsyncTask重要的特性。本文主要解析AsyncTask的的使用与源码。 首先我们来看一下AsyncTask的基本使用:
android开发中遇到的问题汇总(五)
127.ANDROID仿IOS时间_ANDROID仿IOS弹出提示框http://dwtedx.com/itshare_297.html128. Android TextView drawableLeft 在代码中实现方法1Drawable drawable= getResources().getDrawable(R.drawable.drawable); /// 这一步必须要做,否则不会显示.
android 不能在子线程中更新ui的讨论和分析
问题描述  做过android开发基本都遇见过ViewRootImpl$CalledFromWrongThreadException,上网一查,得到结果基本都是只能在主线程中更改ui,子线程要修改ui只能post到主线程或者使用handler之类。但是仔细看看exception的描述并不是这样的,“Only the original thread that created a view hierar
使用Thread+Handler实现非UI线程更新UI界面
概述:每个Android应用程序都运行在一个dalvik虚拟机进程中,进程开始的时候会启动一个主线程(MainThread),主线程负责处理和ui相关的事件,因此主线程通常又叫UI线程。而由于Android采用UI单线程模型,所以只能在主线程中对UI元素进行操作。如果在非UI线程直接对UI进行了操作,则会报错: CalledFromWrongThreadException:only the
React-Native系列Android——Touch事件原理及状态效果
React-Native的强大之处在于实现了较为全面的Touch事件机制,虽然仍略有缺陷,但相比于Hybrid或H5的体验而言,已经足足提高了一大截,下面分析讲解一下其实现原理,和具体使用方式。
Android进阶——构建UI布局的多种方式总结
作为Android App,给人第一印象的就是用户界面(UI),简洁友好的UI,自然会给用户优秀的体验,自然很容易就得到用户的认可和赞许,这样App才变得真正的有价值。所以作为开发App的第一步,UI尤为重要,构建UI有很多种方式:**xml静态布局**、**java动态代码**、**HTML构建(借助WebView)**和第三方开源框架等。
Android多线程分析之三:Handler,Looper的实现
在前文《Android多线程分析之二:Thread的实现》中已经详细分析了Android Thread 是如何创建,运行以及销毁的,其重点是对相应 native 方法进行分析,今天我将聚焦于 Android Framework 层多线程相关的类:Handler, Looper, MessageQueue, Message 以及它们与Thread 之间的关系。可以用一个不太妥当的比喻来形容它们之间的关联:如果把 Thread 比作生产车间,那么 Looper 就是放在这车间里的生产线,这条生产线源源不断地从
cordova 非UI线程更新UI闪退的解决办法
最近在用Cordova 做项目,需要在html页面中更新Tab
sqlite3 错误处理
ProgrammingError: SQLite objects created in a thread can only be used in that same thread. The object was created in thread id 140736341201856 and this is thread id 123145515716608.解决方法:self.connectio...
[新手记录]在ProgressDialog中执行子线程取消的问题
做项目时用到通信部分大多都是要弹出加载框,然后开始数据传输,但是碰到网卡的时候,用户可能会取消登陆,不过按下返回键的话,当前的ProgressDialog会消失,但是数据可能已经通过接口传输到服务端了,我碰到的问题是取消后,服务端依旧会把数据返回到客户端,然后手持段会执行接收到数据的方法,我的解决办法利用全局的静态变量,重写cancel()方法,已登陆为例下面贴下相关代码 public clas
更新UI操作需要在主线程完成
04-01 14:55:33.526: E/AndroidRuntime(17238): android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 04-01 14:55:33.526: E
“只能在UI主线程更新View”这件小事,android ui
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     ”只能在UI主线程中更新View“。     这句话很熟悉吧?     来来,哥们,看一下下面的例子 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS
Android为什么在非UI线程中进行UI操作而不报错
一般而言,android中相关的view和控件不是线程安全的,Android会禁止在非UI线程更新UI,对于显式的非法操作,比如说直接在Activity里创建子线程,然后直接在子线程中操作UI等,Android会直接异常退出,并提示should run on UIThread之类的错误日志信息。而对于隐式的非法操作,App不会直接简单粗暴地异常退出,只是出现奇怪的结果,Only the origi...
Android测试(四) Junit实例
Activity测试部分依赖于Android instrumentation framework.不像其它的components, activity有生命周期向界面发送事件是通过instrumentation. 如果测试的过程中要把自动锁键盘去掉,则需要在xml文件中加 建立测试工程可以用android工具或eclipse,用android工具是 android create test-p
【Android学习笔记】初探Thread、Looper和handler之间的联系
前几天写程序的时候碰到这么一个问题,当时想在子线程中Toast一段话,不废话上代码 new Thread(new Runnable() { @Override public void run() { new Handler(){ @Override ...
为什么只能在主线程中操作UI?为什么子线程中setText不报错?
今天偶然看到之前写过的代码,在activity中创建了一个子线程,然后在子线程中给TextView设置了文字。想到了Android基础原理:只能在主线程中操作UI。这不是矛盾吗?然后就去翻书查资料、看源码,得出了一些结论。 1.为什么只能在主线程中操作UI? 先看源码: View 在对View的操作中,会调用到 invalidate,然后又会调用到 View 的  invalida
异步任务的实现(AsyncTask)
update time:2019-2-21 author:要你命三千又三千 type:学习笔记 轻量级异步任务类概念的简介实现简单的AsyncTask的实现AsyncTask的三个泛型参数说明(三个参数可以是任何类型)使用实例: 概念的简介 AsyncTask 是一个轻量级的异步任务类,是由谷歌提供的使用简单。 异步:异步对应于同步任务 同步任务是单线程的,顺序执行的任务,而异步对应于多线...
EventBus抛异常了,不能在子线程更新UI。
EventBus抛异常了,不能在子线程更新UI。 android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. @Subscribe(threadMode = ThreadMod
【Android】你可能不知道的Support(一) 0步自动定向刷新:SortedList
打算写一个系列了,讲解Android Support包内那些常用or冷门有用的工具类的合集。 最近leader在优化IM会话列表,同事以前的做法是无脑notifyDatasetChanged()刷新RecyclerView的。 在消息聊得很嗨很多的时候,界面频繁刷新,会话列表会出现丢失焦点现象。且性能毕竟不高。 遂想采用**定向刷新**。 同事知道我以前研究过DiffUtil和定向刷新相关内容,于是便和我讨论。
在Unity中调整安卓当前窗口屏幕亮度的实现(无需导出工程或制作插件)
由于我要在程序中实现改变屏幕亮度,可是在网上一找,全是要先导出为安卓工程,或者是创建插件,这些都太烦了。 其实Unity提供了一个很好的和安卓交互的接口,根本不需要另作设置。理论上,只要有安卓代码,都可以在Unity中实现。
安卓开发进阶之RxJava在实际项目中使用--第一篇
关于RxJava原理分析,请参考仍物线写的文章—-给 Android 开发者的 RxJava 详解。本文不对原理作过多的分析,从最快上手的角度,让开发者使用起来,当我们有实践经验后回过头来看原理分析会更清晰。 本系列共有三篇文章,分别关于Rxjava的基础使用(最快,最实用),Retrofit使用(Github上star达22k+,安卓领域排名第一),最后是RxCache缓存(大部分app都支持离
IOS真机切换UI界面时,出现“Only run on the main thread” 的解决方法
[[[YXGSDK sharedInstance] GetViewController] presentViewController:ForgotPasswdV2 animated:NO completion:nil]; 真机环境下,UI的处理必须是单线程的,所以当 在一个已存在的UI上切换新的UI时,会出现Only run on the main thread 错误。告诉你,只
线程中更新 UILabel的text
[self.label1 performSelectorOnMainThread:@selector(setText:) withObject:textDisplay waitUntilDone:YES]; label1 为UILabel,当在子线程中,
react native实现个别页面禁止截屏
今天拿到一个需求,在输入密码的时候禁止截屏,本来想在MainActivity里面写的,但是不好控制,所以就使用react-native调用原生的方法做了一个封装,其实封装都一样,如果在reactMetod方法直接写会报错 Only the original thread that created a view hierarchy can touch its views. 所以需要重新写个线程来...
uwsgi引入gevent模块报错
将uwsgi日志加入: gevent=100 #gevent协程支持,最大100个 gevent-monkey-patch=true #gevent协程补丁 发现django出现以下错误: django.db.utils.DatabaseError: DatabaseWrapper objects created in a thread can only be used in th
【Android自助餐】Handler消息机制完全解析(四)Looper解析
Android自助餐Handler消息机制完全解析(四)Looper解析Android自助餐Handler消息机制完全解析四Looper解析 Looper 初始化prepare 提供looper获取接口myLooper 处理消息队列loop Looper如果你搞过Arduino,那么你肯定知道这个loop()方法。没接触过也没关系,这个方法就是一个通过死循环来重复做某件事的方法。区别是Arduion
关于子线程操作view的一些实践分析
问题点: 最近在做与H5的交互中发现,通过@javascriptInterface提供的接口是运行在子线程中,但是在子线程中却能够操作View,这个有点颠覆了我学Android以来的认知,子线程不能更新view 于是写了demo做了几个实现,demo使用的sdk,目前测试过android-21,android-25和android-27 demo很简单,就是新建一个子线程,分别在里面作如下操...
关于Appium做自动化测试手机自带计算器实例时出现的A new session could not be created.问题 shell “ps ‘uiautomator’
这几天想看一下关于appium自动化测试,但是按照教程做了一下之后,发现自己的根本运行不起来,经过反复排查了自己的开关项、环境配置等问题后,网上查阅了大量的资料,其中中文和外文的都有,但都没有相同的问题(原因可能是复制的错误码太长,搜索的时候重要的信息没有查到),最后终于通过搜索几个关键词的方式,发现了点眉目,最终解决了。自己踩过的坑,特意记录一下。appium+java实现自动化测试实例,参考的...
android 一些网络异常
1、ANR:application not response 应用无响应; androoid中耗时的操作(请求网络,大文件的拷贝,数据库的操作)需要在子线程中做。 09-02 01:52:40.711: E/ActivityManager(857): ANR in com.itheima.sourcelook (com.itheima.sourcelook/.MainActivity)
Activity的onCreate方法里面子线程为何能设置UI界面
这是之前朋友被问的一个面试问题,一般情况下我们都知道Android是不允许子线程更新UI的(通过单线程避免多线程的同步更新问题),但是为什么在onCreate方法里面却可以呢,自己试了一下,在onCreate方法直接new一个子线程并执行类似TextView.setText("Joern")这样的指令,发现的确可以没有报错,其实这个我们分析一下setText的代码就可以发现问题所在。发现setTe...
Xcode9 和 iOS11 遇到的问题
Xcode9 和 iOS11 遇到的问题1、xcode9 UI API called from background thread: -[UIApplication currentUserNotificationSettings] must be used from main thread only解决:对应的库(JPush)在xcode9上运行需要更新到最新版本(其他类似问题也一样的解决方法)2...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 ui制作网页课程 ui产品经理班