Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 启动活动时,应用程序可能在其主线程上做了太多工作_Java_Android_Android Studio_Optimization - Fatal编程技术网

Java 启动活动时,应用程序可能在其主线程上做了太多工作

Java 启动活动时,应用程序可能在其主线程上做了太多工作,java,android,android-studio,optimization,Java,Android,Android Studio,Optimization,我从以前的活动开始活动,但在开始之前,它会冻结几秒钟,有时甚至更长 我试着禁用一些我怀疑的功能,清理代码,甚至优化它的一部分,但这些都不起作用 我不知道我应该在这里分享代码的哪一部分,因为我无法确定这个问题的原因,但是如果您需要查看它,我会包括它 这就是我使用按钮启动其他活动的方式: public void startCount (View v){ Intent intent = new Intent(MainActivity.this, CounterActivity.cla

我从以前的活动开始活动,但在开始之前,它会冻结几秒钟,有时甚至更长

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

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

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

public void startCount (View v){ Intent intent = new Intent(MainActivity.this, CounterActivity.class); startActivity(intent); } 公共无效起始帐户(视图v){ 意向意向=新意向(MainActivity.this,antractivity.class); 星触觉(意向); } 很抱歉,在这里x_x共享代码时遇到问题 SecondActivity.java:

https://pastebin.com/SmiJ0Qiv https://pastebin.com/SmiJ0Qiv 第二个活动布局:

https://pastebin.com/1Ef27edW https://pastebin.com/1Ef27edW 这是我的日志文件:

我怀疑原因是:

GooglePlayServicesUtil: Google Play services out of date. Requires 12451000 but found 10298470 GooglePlayServicesUtil:GooglePlayServices过时了。需要12451000,但找到10298470
如果您能指出导致冻结的问题,我们将不胜感激!谢谢。

在大多数情况下,这是由于在非主线程(UI线程)的线程中启动其他活动的代码造成的

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


可能是您在那里执行耗时/cpu的任务。

在许多情况下,您必须考虑
java
最佳实践,以及使用一些
设计模式

在这里,我将列出一些您应该考虑的
基本模式
实践

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

最佳实践

  • 连接
    字符串时使用
    StringBilder
  • 避免使用正则表达式
  • 使用基本体和堆栈
设计模式

设计模式是经验证的解决特定问题/任务的解决方案

这些是最常见的:

  • 单态模式
  • 原型模式
  • 工厂模式
是了解更多信息的链接


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

它会冻结2-3秒吗?@PhillAlexakis是的,大多数情况下会在这段时间内冻结。您的应用程序是否会获取或发送信息到远程api/位置?我的项目中包括firebase,不确定这是否算数?我已经设置了ads toolet,简单地说,如果你需要internet连接来运行你的应用程序,很可能这就是冻结的情况,我将向你列出一些要考虑的
java
最佳实践首先感谢你分享你的代码。在查看代码之后,似乎您在onCreate方法上做了太多的事情。你应该一分为二(至少)或更多。内部:onCreate只需让代码负责视图,并将其他代码移动到onStart,例如。你是对的,onCreate上的工作太多了,当我只剩下负责视图的必要代码时,它现在运行得很顺利,我只需要将其余的工作放在另一个方法上,我应该没事了。谢谢谢谢你分享的有用信息我当然需要把它们付诸实践,但冻结的主要原因是谷歌广告加载过程,在我将其移动到一个单独的方法后,不再冻结!谢谢你宝贵的时间