首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是什么原因导致TextView上的setText出现ANR?

原因分析

TextView 上的 setText 方法出现 ANR(Application Not Responding)通常是由于主线程阻塞导致的。在 Android 应用中,主线程负责处理 UI 事件和更新 UI 组件。如果在主线程上执行耗时操作,比如网络请求、大量计算或数据库操作,就会导致主线程阻塞,从而引发 ANR

解决方法

  1. 异步处理:将耗时操作放在子线程中执行,然后通过 HandlerrunOnUiThread 将结果传递回主线程进行 UI 更新。
  2. 异步处理:将耗时操作放在子线程中执行,然后通过 HandlerrunOnUiThread 将结果传递回主线程进行 UI 更新。
  3. 使用 AsyncTask(已废弃,建议使用 ExecutorServiceKotlin 协程):
  4. 使用 AsyncTask(已废弃,建议使用 ExecutorServiceKotlin 协程):
  5. 使用 ExecutorService
  6. 使用 ExecutorService
  7. 使用 Kotlin 协程(适用于 Kotlin 项目):
  8. 使用 Kotlin 协程(适用于 Kotlin 项目):

应用场景

  • 网络请求:在获取网络数据后更新 UI。
  • 数据库操作:从数据库读取数据后更新 UI。
  • 大量计算:完成复杂计算后将结果展示在 UI 上。

参考链接

通过以上方法可以有效避免 TextView 上的 setText 方法导致 ANR 的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

EasyCVR视频通道名称出现乱码是什么原因导致的?如何修复?

大家知道EasyCVR视频智能监控平台支持摄像机的RTSP、GB28181、和Ehome的接入,同时会对接入上来的视频信息进行同步的更新和反馈,因此视频通道的名称是实时更新的,当通道变化,名称也会随之重新生成...UTF-8 用3个字节编码一个汉字,Default (在中文系统上是GB2312 )用2字节编码一个汉字。...反过来也是一样的状况。 在本文中,EasyCVR的通道名称由于字节数不足,发生编码回退,最后导致编码错误。 由于是编码问题导致的,那么我们就从编码上来解决。...解决这个问题需要分为两个部分,一个是通过设备端修改上传的协议字符模块,一个是通过平台的修改来满足协议的修改。默认我们将协议交互的模式统一为utf-8就可以满足需求了。...EasyCVR将视频变为有用的信息,与大数据、云计算技术相结合能形成巨大的资源信息库,为城市的现代化建设提供有力的信息支撑和辅助决策支持。

1K20

微信“ 15。。。。。。。。。”来龙去脉

与此同时,很多热心的网友也开始分析原因,25号当日就有行内大神通过ANR日志和反编译debug,一步步推敲出此次ANR的根源,给出了卡死的原因。请受小弟一拜,实在佩服佩服!...继续追根问底:是什么原因造成断句算法一直返回0呢,实际上断句算法是调用了以下这个函数: 该函数返回了一个对象a其包含两个参数,一个是断句的位置(a.wwk),及断句后的文字长度(a.width),主要是因为在判断换行的时候...,所以这里TextView即是气泡有了最大的宽度限制,当剩下的空间不足以容下一个字符时,系统排版会选择自动换行,导致了这个问题的产生。...回归正题,我们对系统TextView的规则进行对比,最后我们确定了以下几条规则: 1、最多允许有一个字母字符宽度的来调整字间距 2、对于标点符号尽量规避不出现在行首 3、对于英文单词或数字不截断排版 于是我们开始进行简单的...(ns) 16516024 2459097 setText触发onDraw,30次的平均耗时 sum(ns) 20014113 11304826 setText整个过程,30次的平均耗时 结论: 从微观上

3.5K40
  • android 线程那点事

    为什么会出现ANR Android希望UI线程能根据用户的要求做出快速响应,如果UI线程花太多时间处理后台的工作,当UI事件发生时,让用户等待时间超过5秒而未处理,Android系统就会给用户显示ANR...所以在BroadcastReceiver的onReceive()函数中,不宜占用太长的时间,否则导致主线程无法处理其它的Broadcast消息或UI事件。...子线程为什么不能更新UI 因为UI访问是没有加锁的,在多个线程中访问UI是不安全的,如果有多个子线程都去更新UI,会导致界面不断改变而混乱不堪。...主线程实际上是一个死循环,不断的循环处理系统以及其他子线程发来的消息。主线程的绑定是在DecorView初始化的时候,也就是生命周期的onResume()之后。...主线程主要处理UI操作,和Broadcast相关消息,主线程如果长时间无法响应,将出现ANR,为了避免ANR,耗时操作一般都开启子线程处理。子线程处理完再发消息通知主线程来改变UI。

    81450

    android入门 — 多线程(一)

    android中的一些耗时操作,例如网络请求,如果不能及时响应,就会导致主线程被阻塞,出现ANR,非常影响用户体验,所以一些耗时的操作,我们会想办法放在子线程中去完成。   ...android的UI操作并不是线程安全的,所以多个线程并发操作UI组件的时候,则可能导致线程安全问题。为了解决这个问题,android只允许UI线程修改UI组件。...Runnable() { @Override public void run() { textView.setText...,当点击按钮的时候,开启子线程去更改TextView中的文字,但是在编译的时候是无法通过的,因为不允许在子线程中直接对UI线程中组件进行操作。   ...{ case 0x0001: int index = msg.arg1; textView.setText

    57860

    oom和anr简单理解

    ANR(Application Not Responding)定义 在Android上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application...,导致UI阻塞住超过5秒,这个时候用户一定很气恼准备砸手机卖肾了,Android系统也会认为你的app做得实在是太烂了,赶紧提示用户把app结束掉,别让用户以为是安卓太烂了的缘故。...text=(TextView)findViewById(R.id.text); button.setText("查看内存"); button.setOnClickListener(new...BitMap隐患 Bitmap的不当处理极可能造成OOM,绝大多数情况应用程序OOM都是因这个原因出现的。Bitamp位图是Android中当之无愧的胖子,所以在操作的时候必须小心。 2.1....引用地狱 Activity中生成的对象原则上是应该在Activity生命周期结束之后就释放的。

    8810

    平台出现CPU过高的现象是什么原因?如何解决?

    EasyGBS平台功能全面、综合性强、视频能力灵活,能够涵盖所有监控领域的需求,已经在大量的项目中落地应用,如明厨亮灶、平安乡村、雪亮工程等。...有用户反馈,在使用EasyGBS时,出现了CPU过高的情况,请求我们协助排查。今天来和大家分享一下排查及解决办法。 通过pprof工具分析发现,是下级信令异常,频繁发送给上级导致CPU过高。...添加如下代码,将下级的sip消息解析过后,设置对应的频率处理,如果是不重要的消息则直接忽略;如果是需要处理的消息,按照一定的间隔时间来处理,如此可以保证程序的稳定运行。...13-1.jpg EasyGBS强大的视频能力既可以作为业务平台,也能作为视频能力平台进行调用,此外平台级联功能可以实现平台与平台之间的数据互联互通、资源共享,在应用场景中达到视频资源汇聚、协同监督、平台联动等目的...感兴趣的用户可以前去演示平台进行体验,或者下载进行部署测试。

    39120

    EasyCVR出现重复的GB设备目录是什么原因?如何解决?

    有用户反馈,在使用EasyCVR时,GB设备的目录出现了重复的现象。针对该反馈,我们立即进行了排查与解决。1)排查数据库发现,确实存在两个名称一样但是GB编码不一样的情况,说明数据是正常的。...2)抓sip信令查看,也是存在这两个目录,说明数据库存储数据的流程也是正常的。仔细查看发现,实际第一个目录不用推上来,因为目录ID和设备ID一致了,但是下级推了,就导致展示两个一样的目录。...分析两个名称一致的目录,一个目录ID和设备ID是一致的,这个一致的目录实际是不需要的,可在代码中过滤掉。当目录ID与设备ID一致,就跳过写入到数据库中。...优化后预览如下:在视频能力上,EasyCVR可实现视频直播、录像、回放、检索、云存储、告警上报、语音对讲、集群、智能分析以及平台级联等。...感兴趣的用户可以前往演示平台进行体验或部署测试。

    19820

    Android vitals 提升app性能和质量

    ANRs ANR是Application Not Responding的缩写,是UI线程如果被阻塞太长的时间所造成的。触发ANR问题的主要有两个原因: 在主线程上执行磁盘或者网络 I/O。...这是迄今为止导致 ANR 的最常见原因。虽然大部分开发者认同不应该在主线程上进行读写磁盘或者网络,但是有时候我们就是忍不住这么做。...在理想情况下,从磁盘上读取几个字节的数据并不会引发 ANR,但是这绝对不是什么好主意。...您可以考虑重新调整百万像素大图像的体积,或者在解析大HTML 文本块后,再将文本显示到 TextView 中。...多线程编程不容易,并且在使用同步锁的时候,很难保证不出现阻塞执行。在最糟糕的情况下,可能会出现死锁问题,即不同线程相互卡死。

    95340

    EasyNVR通道离线但视频流可正常播放是什么原因导致的?

    一般视频通道接入EasyNVR后,视频广场就会清楚显示视频的快照和在线情况,快照默认一分钟更新一次,在线情况也是同步更新。 有EasyNVR的用户反馈在平台中,通道显示是离线状态,但是流可以正常播放。...经过多次观察后发现用户的流实际是不稳定的,经常性在线离线反复跳跃。...这里我们需要提到一个底层库EasyStreamClient,这个库有个现象,就是流只会连接一次,如果流离线了,连接失败就会阻塞,所以如果流再次上线也是不会重新连接的,造成流实际在线但是EasyNVR上显示离线...如果不在线就继续重连,修复测试后离线不会上线的问题解决了,但是在给用户测试时出现cpu升高的情况,而我们本地多次测试都没有这种情况发生。...接着查看了EasyNVR的线程,打印了线程里的状态,发现实际连接的流端口和用户填写的不一致,如下: 抓包分析后发现用户的流会出现重定向的情况: 根据以上我们确定是重定向的流消耗了cpu资源,在我们内部经过多次测试和讨论后

    36010

    网站排名为什么会下降,是什么原因导致排名下降的

    网站排名.jpg 1、竞争对手,百度搜索看看是否是竞争对手成长的原因,看看首页上有哪些网站,分析一下首页上的网站,然后改变自己的网站优化策略。...2、网站的安全问题,网站被K和挂木马的影响,也是对关键词排名产生影响,在构建网站时,应设计网站代码,提高网站的安全性,减少网站被恶意攻击的可能性。...4、友情链接问题,检查一下你自己的一些链接是否有单一的链接,以及链接的质量,这将对网站的排名产生一定的影响。...5、网站有更多的死链,由于该网站已经做了很长时间,有更多的文章在网站上,在优化的过程中,我们有时会觉得有些内容不合适,选择删除,这会导致有死链接的产生,当百度蜘蛛抓取后,链接无法访问,这样会对你的网站优化排名不利...,会导致关键词排名下降。

    53920

    2014-10-27Android学习------布局处理(八)------自定义吐司(Toast)-----城市列表应用程序

    import android.view.WindowManager; 这里我从Android文档里面找出这些变量的意义出来 大家看看就这个这个变量是什么意思了: 对应这一句: WindowManager...是实现了ViewGroup.LayoutParams的 下面这张图给我们展示他的构造函数: 我们选择的构造函数正好就是框起来的那条 接下来就是看各个参数是什么意思了: 到这里就结束了。...说白了这个初始化函数就是在当前的窗体上添加一个视图 :这个视图就是我们自定义的吐司(Toast) 这里也告诉我们一点:如果我们想去实现某个方法,从Android的文档中去找 我们需要的东西是最合适的...一般来说Android里面更新视图的功能都是由主线程来执行的,但是它执行的时间间隔相当的短,好像只有6秒,如果超过这个时间的话,应用程序会出现anr异常的。...因为这个是个内部类,上一步我们有可能已经触摸了某个字母的,这个线程是在运行着的,当我们再触摸一个字母的时候,我们需要先让这个线程对象停止掉, 方法postDelayed的作用是延迟多少毫秒后开始运行:这个函数的作用就是让这个线程延迟

    62330

    AI智能分析开发中采用c++中文编码出现乱码是什么导致的?

    EasyCVR的AI智能分析版本在做研发的时候,就受到了很多朋友的关注,EasyCVR的人脸识别功能采用了Go语言,使用c/c++ 的头文件和dll文件。...在C++ 中如果出现中文,会出现乱码的问题,使用notepad++打开保存的二进制文件,出现乱码。...image.png 正常的情况选择UTF8编码正常显示: image.png 在计算机的内部,所有的数据都是以二进制的形式保存的,在存储文本时,需要将文本文件的信息都转换为二进制进行保存,而现实是将二进制转换为文本显示...ASNI:除了中国以外,其他的许多国家页都制定自己的编码标准。 Unicode:由于不同的ANSI编码之间互不兼容,这样进行信息交互就会进行编码转换。...UTF-8:Unicode可以表示所有的字符,但是英文字符也与其他字符一样,使用两个字节进行编码,使得在保存英文文本的时候会多出一倍的存储空间,而大多数的文本信息都是英文的。

    1.6K20

    EasyCVR编辑设备通道的录像计划时,出现报错无法提交是什么原因?

    EasyCVR视频平台是TSINGSEE青犀视频研发的视频融合共享平台,支持RTSP、Onvif、GB28181等主流协议,同时也支持HIKSDK、Ehome等私有协议,其他主流厂家的私有协议也在不断扩展中...,目前也已经支持了大华的SDK。...64fd152804e261fa316f59c4aa819734 (1).png EasyCVR编辑设备通道的录像计划时,出现报错,无法提交的情况: 532f6caf389ad1e500cfa7f1a846468b...(1).png 通过报错来看,应该是前端传入后端录像数据,后端解析的时候格式出现报错。...添加如下代码,前端点击提交过后,后端先进行一个数据转换,将http请求中的数据放在body中,然后转成对应的json格式数据,之后存入数据库。

    31530

    Android vitals 帮您解决应用质量问题

    界面卡屏几秒后,会出现对话框让用户选择继续等待或者强行停止应用。 从开发者的角度来看,ANR 则是指应用运行的操作耗时过久,如磁盘或网络 I/O,导致主线程阻塞。...应用程序无法响应常见原因 如上文所述,当应用进程影响到主线程时,ANR 事件会被触发,而导致这种阻塞现象的原因各有不一,较为常见的有: 在主线程上执行磁盘或者网络 I/O。...这是迄今为止导致 ANR 的最常见原因。虽然大部分开发者认同不应该在主线程上进行读写磁盘或者网络,但是有时候我们就是忍不住这么做。...在理想情况下,从磁盘上读取几个字节的数据并不会引发 ANR,但是这绝对不是什么好主意。...这两种情况都很可能导致长时间阻塞操作。幸好我们有 StrictMode,不用再自己瞎猜是什么原因导致 ARN 了。在调试构建的时候,您可以使用这个工具捕捉主线程上的意外磁盘或网络访问。

    1.5K10

    Android内存泄漏的原因、解决办法以及如何避免

    作为开发人员,在我们的日常开发中,为了构建更好的应用程序,我们需要考虑很多事情以保证应用运行在正轨上,其中之一是要确保我们的应用程序不会崩溃。应用崩溃的一个常见原因是内存泄漏。...在Android中,如果该对象是一个Activity对象,是特别麻烦的,因为他们往往拥有大量的数据。让我告诉你,可能是什么样子。...通过寻找深度为零的实例,我们发现位置管理器中的实例mListener,是我们的Activity不能被GC回收的原因。...(result); } } } 这种特殊的实现在执行上没有问题。...根据前一个例子的经验,我们可以知道在引用树中高亮标注的实例导致了Activity泄露。那么这是什么回事?

    2.1K10

    智能安防视频平台EasyCVR出现通道列表为空情况的原因是什么?

    EasyCVR平台基于云边端一体化架构,支持将分散的视频资源统一汇聚与管理,实现对视频资源的处理与分发、直播、录像、回看、存储、智能分析等。...近期我们正在对EasyCVR进行新功能的拓展,比如服务器集群、视频轮巡、H.265转码H.264、电子地图与轨迹跟踪等等,欢迎大家关注我们的更新。...有用户现场反馈,EasyCVR在使用时,出现了通道列表为空的情况,不知道什么原因,请求我们排查协助。技术人员立刻对该情况进行了排查和分析。...原来后端传入的数据虽然传递了分页,但是没有传递通道数据,因此出现了通道列表为空的情况。...参考如下代码进行优化,查询总表的设备数据,然后再查询子表的设备数据,如果子表设备不存在,则将主表数据清除,最后将结果再返回给前端。

    31620
    领券