当前位置: 首页 > 知识库问答 >
问题:

如何在Android中修复“应用程序可能在其主线程上做了太多工作”?[副本]

齐阳
2023-03-14

当我从缓存中获取大量数据(以视频的形式)时,应用程序会在长时间延迟后做出响应。

如何解决或修复它?

共有1个答案

洪和风
2023-03-14

当执行长时间运行或计算量大的任务时,您应该更喜欢在后台线程上执行(即,与UI线程分离)。

如果UI线程保持忙碌的时间超过5秒,你会在应用程序上看到ANR,但即使不到5秒,用户操作(单击、滚动)也会有明显的延迟和延迟,日志中会出现与你看到的类似的消息(编舞:跳过了XXX帧!应用程序可能在其主线程上做了太多工作)。

在后台线程上执行此类任务的一些方法有:

  • 异步任务

此外,从后台线程更新UI时要小心,因为Android UI toolkit不是线程安全的。

编辑:

对于从主线程卸载任务,还可以使用:

  • 科特林合作项目
  • RxJava
 类似资料:
  • 我正在开发一个android应用程序,在其中我可以进行高级图像处理,我使用自定义相机预览来捕获图像,但当我启动应用程序后检查logcat时,我发现来自Choreographer的消息跳过了440帧!应用程序可能在其主线程上做了太多工作。 我的日志如下 我在方法中使用自定义相机预览来频繁捕获缓冲区图像,如果它包含“人脸”,则将其发送处理。 当图像处理部分被执行时,它的帧被编排跳过,我没有得到预期的结

  • 我正在开发一个日历应用程序,并使用textview作为日历单元格,当我启动应用程序后检查logcat时,我发现来自Choreographer的消息“跳过了76帧!应用程序可能在其主线程上做了太多工作”。我知道我正在创建很多文本视图(120),但如何在不影响应用程序性能的情况下构建日历呢?是否有其他方法可以构建支持活动的日历?

  • 当我在emulator上启动应用程序时,我发现以下消息 我看到有很多类似的问题,但每个问题都有不同的解决方案。Tnx很多! 日志猫 搜索ictionary.java WordActivity.java 字典提供程序。Java语言 公共类DictionaryProvider扩展ContentProvider{String TAG="DictionaryProvider";

  • 我对Android非常陌生,在我的应用程序中,当我点击添加在碎片类上的按钮时,我在活动上添加了碎片,我在我的日志猫上得到警告,如下所示- 跳过91帧!应用程序可能在其主线程上做了太多工作。 请帮帮我我该怎么解决这个?

  • 您好,我正在开发一个android应用程序,当我尝试从我的应用程序发送电子邮件时,我会遇到这个错误。基于此链接,我在后台发送邮件而不使用意图 我的程序: 当我直接指定收件人的电子邮件地址时,应用程序工作正常。当我将其指定为存储收件人电子邮件地址的字符串数组时,问题就来了。 Logcat显示: 跳过222帧!应用程序可能在其主线程上做了太多工作。 谁能告诉我到底是什么问题?

  • 我的代码可以工作,但我在监视器中有一条异常消息:我/编舞:跳过了37帧!应用程序可能在其主线程上做了太多工作。 我知道这个错误消息意味着我在用户界面线程中做了很多繁重的处理。问题是对我来说,除了向列表视图添加假数据,我在用户界面线程上几乎什么都不做。我正在使用Asyncask发出一个应用编程接口请求,这是我正在做的唯一的“繁重”工作,它不在主线程中。 我把我所有的代码放在这里,但我认为大部分都不是