android 线程太多,应用程序可能在其主线程上做了太多的工作。

任何开始开发android应用程序的人都会在logcat上看到这个消息。编舞(ABC):跳过xx帧!应用程序可能在其主线程上做了太多的工作。“那么,它到底意味着什么,你为什么要关心它,以及如何解决它。

这意味着您的代码需要很长时间才能处理,而框架正因此而被跳过,这可能是因为您正在应用程序或DB访问的核心做一些繁重的处理,或者其他导致线程停止一段时间的事情。下面是一个更详细的解释:Choreographer允许应用程序将自己连接到vsync,并对事情进行适当的时间安排以提高性能。

Android视图动画内部使用编舞器的目的是相同的:正确地计时动画,并可能提高性能。

由于Choreographer被告知每个vsync事件,我可以判断由Choreographer.post*API传递的Runnable是否没有在一个帧的时间内完成,从而导致帧被跳过。

据我理解,编舞员只能检测帧跳过。它无法解释为什么会发生这种情况。

消息“应用程序可能在其主线程上做了太多的工作。”可能会误导你。

你为什么要担心

当这条消息弹出在Android仿真器上,并且跳过的帧数量相当少(<100)时,您可以安全地打赌仿真器是慢的-这种情况几乎时有发生。但是,如果帧的数量跳过而且很大,并且按300+的顺序排列,那么您的代码可能会出现一些严重的问题。Android设备的硬件种类繁多,与iOS和Windows设备不同。RAM和CPU各不相同,如果您希望在所有设备上都有一个合理的性能和用户体验,那么您需要修复这个问题。当框架被跳过时,UI是缓慢和滞后的,这不是一种理想的用户体验。

如何修复

要解决这一问题,需要识别存在或可能发生长时间处理的节点。最好的方法是在一个与主UI线程分离的线程中完成所有的处理,不管这个线程有多小或多大。因此,无论是访问SQLite数据库中的数据,还是做一些硬核运算,还是简单地对数组排序-在另一个线程中进行排序

现在这里有一个陷阱,您将为执行这些操作创建一个新线程,当您运行应用程序时,它会崩溃,说“只有创建视图层次结构的原始线程才能触摸其视图”。您需要知道,Android中的UI只能由主线程或UI线程更改。任何其他试图这样做的线程都会失败并与此错误崩溃。您需要做的是在runOnUiThread中创建一个新的Runnable,在这个Runnable中,您应该执行涉及UI的所有操作。找一个例子这里.

因此,我们有线程和可运行的处理数据的主线程,还有什么?Android中有AsyncTask,它允许在UI线程上执行长时间的进程。这是最有用的,当你的应用程序是数据驱动或WebAPI驱动或使用复杂的UI,如那些构建使用画布。AsyncTask的功能是允许在后台进行操作,一旦您完成了处理,您就可以简单地在UI上执行所需的操作,而不会造成任何滞后效应。这是可能的,因为AsyncTask本身来自Activity的UI线程-您通过AsyncTask在UI上执行的所有操作都是一个与主UI线程不同的线程,不妨碍用户交互。

因此,这是您需要知道的,以使顺利的Android应用程序,据我所知,每个初学者从他的控制台得到这条消息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/419525.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于Docker官方CentOS镜像无法启动mysqld的总结

很多童鞋反映&#xff0c;在Docker官方CentOS镜像中安装了Mysql server后&#xff0c;无法正常启动。 无法正常启动表现为两种情况&#xff1a; 1> 初始完数据库后&#xff0c;mysqld启动报错 2> systemctl start mysqld或者service mysqld start报错 首先重现一下现场。…

oracle之数据处理之其他数据库对象练习

1. 创建序列dept_id_seq&#xff0c;开始值为200&#xff0c;每次增长10&#xff0c;最大值为10000 a) create sequence dept_id_seq b) start with 200 c) increment by 10 d) maxvalue 10000 2. 使用序列向表dept中插入数据 a) insert into dept01 b) values(dept_id_seq.nex…

android 刷rom,刷ROM是什么?刷ROM是什么意思?

刷ROM是什么意思首先&#xff0c;ROM是由英文Read only Memory的首字母构成的&#xff0c;意为只读存储器。顾名思义&#xff0c;就是这样的存储器只能读&#xff0c;不能像RAM一样可以随时读和写。它只允许在生产出来之后有一次写的机会&#xff0c;数据一旦写入则不可更改。它…

网站

Json解析&#xff1a;http://json.tongxiehui.net/ MD5破解&#xff1a;http://www.cmd5.com/转载于:https://www.cnblogs.com/Eazy/p/4840789.html

oracle之set运算符和练习

--创建表 create table emp01 as select * from employees where department_id in (70,80)-- --创建表 create table emp02 as select * from employees where department_id in (80,90) --查询 --并集 select * from employees where department_id in (70,80) union all se…

html自动加https,http自动跳转https的配置方法

IIs中实现Http自动转换到Https方法介绍 (403跳转对SEO有一定影响)1.下载安装URL重写模块&#xff1a;Microsoft URL Rewrite Module32位&#xff1a;http://download.microsoft.com/download/4/9/C/49CD28DB-4AA6-4A51-9437-AA001221F606/rewrite_x86_zh-CN.msi64位&#xff1a…

活动页面html设计,活动查看页面.html

&#xfeff;活动查看页面$axure.utils.getTransparentGifPath function() { return resources/images/transparent.gif; };$axure.utils.getOtherPath function() { return resources/Other.html; };$axure.utils.getReloadPath function() { return resources/reload.html…

《程序员在第一季度追姐姐的书》——提升自己的形象气质

去年&#xff0c;许久没有联系我的高中女同学&#xff1b;突然给我发来了QQ消息。丝毫不犹豫的点击开她的QQ空间。这家伙都已经变成大美女了。。此处省去一万字..... 原来是找我给她p图来了。。一看她的QQ空间里面的说说&#xff0c;这才得知原来妹子已经恢复单身啦&#xff0c…

oracle之高级子查询1

--子查询 查询last_name为chen的manager信息select employee_id,last_name from employees where employee_id( select manager_id from employees where last_nameChen ) 运行结果 --查询 select employee_id,manager_id,department_id from employees where manager_id in( …

intp适合学计算机吗,⑨MBTI测试,分析INTP型人格的专业选择和职业选择

原标题&#xff1a;⑨MBTI测试&#xff0c;分析INTP型人格的专业选择和职业选择在MBTI职业性格测试中&#xff0c;INTP型人格&#xff0c;沉默、自主、思维敏捷、自主性强&#xff0c;对理论和科学有自己的追求。喜欢提出新主张&#xff0c;也爱用逻辑去分析问题&#xff0c;为…

STL学习笔记(仿函数)

仿函数(Functors) 仿函数(functor)&#xff0c;就是使一个类的使用看上去象一个函数。其实现就是类中实现一个operator()&#xff0c;这个类就有了类似函数的行为&#xff0c;就是一个仿函数类了。 例如我们定义一个类&#xff1a; class X{public:return-value operator()(arg…

郸城二高2021年高考成绩查询时间,河南高考最高分是谁,2021年河南高考状元名单分数学校...

每年的高考状元是广大考生、家长以及老师最关注的事情&#xff0c;2021年河南高考状元是谁&#xff0c;以下是小编整理的历年河南高考状元&#xff0c;仅供参考。一、2021年河南高考状元名单2021年河南高考状元暂未公布&#xff0c;小编会持续关注并及时更新。二、2020年河南高…

使用NuGet发布自己的类库包(Library Package)

http://www.cnblogs.com/daxnet/archive/2013/05/07/3064577.html 转载于:https://www.cnblogs.com/shiningrise/p/4842367.html

减少GC开销的5个编码技巧

在这篇文章中&#xff0c;我们来了解一下让代码变得高效的五种技巧&#xff0c;这些技巧可以使我们的垃圾收集器&#xff08;GC&#xff09;在分配内存以及释放内存上面&#xff0c;占用更少的CPU时间&#xff0c;减少GC的开销。当内存被回收的时候&#xff0c;GC处理很长时间经…

HTML5DOM红蓝盒子,DOM介绍以及使用方法(示例代码)

DOM的基本讲解一、DOM(Document Object Model)文档对象模型1、有属性有方法1 var person {2 name:‘派大星‘,3 fav:function(){4 }5 }2、js中对象分类三种(1)用户定义对象(2)内建对象 Array Date Math (内置)(3)宿主对象3、Model Map(地图)(1)把 DOM 看做一颗“树”(2)DOM 把文…

JavaBean为什么要实现Serializable接口

Java"对象序列化"&#xff1a;是指将实现了Serializable接口的对象转换成一组byte&#xff0c;日后要用这个对象时候&#xff0c;可以根据byte数据恢复出来&#xff0c;并据此重新构建那个对象。 优点&#xff1a; 1、JavaBean类基本都要求实现了Serializable接口&…