3

因此,在编写了一段时间的 android 应用程序(1 个上传到市场,有 3k+ 活跃安装和 4,7 评级)之后,我开始想知道,我怎样才能让我的应用程序更加出色。我意识到,我无法真正添加任何真正新的、改变世界的功能,所以我开始检查性能,以及如何优化几乎所有内容,如何找到最佳的 cpu/内存使用率等等。

无论如何,我发现 onCreate 会在旋转屏幕的情况下运行,这很符合逻辑,但是有一些(大)计算,我肯定不需要在每次旋转后重做。其中之一是遍历具有 6500 行、有 4 列的 csv,其中 2 总是包含一些数据,其中 2 并不总是。带有数据的 2 列将用于自动完成适配器,另外 2 列对于功能是可选的,但仍需要初始化。目前,这是在 asynctask 中运行,在 onCreate 结束时触发,在我的 HTC Desire S 上大约需要 3 秒,它有一个相当好的 CPU,所以预算较低的设备在每次旋转后会有更长的初始化时间,即当然不是我想要的……它不会使 UI 崩溃,但在这几秒钟结束之前不会有任何自动完成功能。

SO:我的问题是,我可以在一些单独的方法中执行此操作,例如构造函数(如在标准 Java 中),还是因为活动的特殊生命周期,这是一种不好的做法?我的意思是,我以“构造函数”运行的方式实例化我的活动,然后,我的 onCreate 将运行。在旋转的情况下,我的“构造函数”不会再次运行,但 onCreate 会。稳定仍将是我的 nr1 目标。或者,有什么好的方法可以做到这一点?正是为此而创建的东西,我不知道?我真的很想在这件事上改进很多,我真的很感激这方面的一些帮助,最好是有这方面经验的人,但欢迎任何帮助!:)

例如,如果我想以这种方式创建一个新活动,我会这样做:

new MyActivity(some parameters);

所以构造函数运行,结束如下:

startActivity(new Intent(context, MyActivity.class));

所以这样,构造函数运行,我的变量将被初始化(不连接到任何视图等),之后,我的活动可以随时运行它的 onCreate 变量。

如果我的语法错误,请原谅我,我只是快速输入它:)

4

2 回答 2

1

您应该将此逻辑与您的活动分离。有很多方法可以做到这一点,但最终目标是让你的 csv 解析在不同的类中完成,并且这个类应该公开有关数据是否已经被解析的信息。因此,在 onCreate 中,您调用您的类来获取数据。如果它已经存在,您将立即获取缓存数据。如果这是第一次调用该方法或由于某种原因您的缓存已被清理,您解析您的 csv 文件并执行您需要的任何计算。

于 2012-03-13T15:59:51.473 回答
0

您可以查看onRetainNonConfigurationInstance,它可以返回一个对象,您可以在重新创建活动后访问该对象。所以您只需返回一个包含 onCreate 的所有处理结果的对象,下次检查是否有 getLastNonConfigurationInstance () - 不要重新计算所有内容

于 2012-03-13T16:01:50.360 回答