【问题标题】:Application may be doing too much work on its main thread, when starting an activity启动活动时,应用程序可能在其主线程上做太多工作
【发布时间】:2019-12-27 17:37:02
【问题描述】:

我正在从上一个活动开始活动,但在开始之前,它有时会冻结几秒钟!

我尝试禁用一些我怀疑的功能并清理代码甚至优化部分代码,但这些都不起作用!

我不知道我应该在这里分享哪一部分代码,因为我无法确定这个问题的原因,如果你需要看一下,我会包含它。

这就是我使用按钮开始其他活动的方式:

public void startCount (查看 v){

        Intent intent = new Intent(MainActivity.this, CounterActivity.class);
        开始活动(意图);
    }

抱歉,我在这里共享代码时遇到问题 x_x SecondActivity.java:

https://pastebin.com/SmiJ0Qiv

第二个活动布局:

https://pastebin.com/1Ef27edW

这是我的日志文件: https://www.pastiebin.com/5d5e7cf1c8e4d

我怀疑原因来自于此:

GooglePlayServicesUtil:Google Play 服务已过期。需要 12451000 但找到 10298470

如果您能指出导致这种冻结的问题,我们将不胜感激!谢谢。

【问题讨论】:

  • 它会冻结 2-3 秒吗?
  • @PhillAlexakis 是的,大多数情况下它会在那个间隔内冻结
  • 您的应用程序是否获取或发送信息到远程 api/位置?
  • 我的项目中包含了 firebase,不确定这是否重要?我也设置了广告
  • 简单来说,如果您需要互联网连接来运行您的应用程序,这很可能是冻结的情况,我会列出一些java 最佳实践以供考虑

标签: java android android-studio optimization


【解决方案1】:

在许多情况下,您必须考虑java 最佳实践以及使用一些design patterns

在这里,我将列出一些您应该考虑的basic patternspractices

你当然可以自己查,但我会在这里提几件事

最佳做法

  • 在连接String 时使用StringBilder
  • 避免使用正则表达式
  • 使用原语和堆栈

设计模式

设计模式是用于解决特定问题/任务的经过充分验证的解决方案。

这些是最常见的:

  • 单例模式
  • 原型模式
  • 工厂模式

Here 是了解更多信息的链接

注意:这不一定能解决您的问题,但可能会提高性能。

【讨论】:

  • 感谢您分享的有用信息,我肯定需要将它们付诸实践,但冻结的主要原因是谷歌广告加载过程,在我将其移至单独的方法之后不再结冰!感谢您宝贵的时间
【解决方案2】:

在大多数情况下,这是由于在不是 MainThread(UI 线程)的线程中启动其他活动的代码。

因此,请分享启动其他活动的代码部分,如果可能,请在其他活动中分享protected void onCreate(Bundle savedInstanceState)

可能是你在那里做的时间/CPU消耗任务。

【讨论】:

  • 首先感谢您分享您的代码。查看您的代码后,您似乎在 onCreate 方法上做了太多事情。您应该根据需要分成两部分(至少)或更多部分。 inside : onCreate 只是让代码负责视图并将其他代码移动到 onStart 例如。
  • 嗯,你说得对,onCreate 上的工作太多了,当我只留下负责视图运行顺利的必要代码时,我只需要将其余的工作放在另一个方法上,然后我应该没事。谢谢
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多