如何改善应用程序的ActivityManager加载时间?

时间:2011-05-27 20:35:07

标签: java android optimization android-activity

我写了一个应用程序,可以在启动时处理大量数据;应用程序的第一次启动时间相当慢,但后续启动也是如此。

我之前认为相对无响应的启动时间(约7秒)是由于第一次加载时的数据处理 - 一些调试建议冷加载约2秒。因此,我重新设计了我的数据结构,以便在启动之间更容易序列化到持久存储(因此它会缓存内容),现在它可以在应用程序完成大约20ms后保存状态,加载时间大约为10-20ms。好多了。 (ps它没有使用内置的Java序列化,因为状态文件现在非常简单,更容易保存在一个简单的,人类可读的(可编辑的)文本文件中 - 尽管如此,它仍然可以很快地重新加载!)< / p>

但是,我仍然发现应用启动时间大约是5秒 - 我查看了一个带有条目的logCat:

I/ActivityManager(...) blah blah blah: +5s193ms

加载一个相对简单的布局(一些嵌套的LinearLayouts和一些TextViews - 没什么特别的,没有图像)超过5秒 - 不可否认,随着时间的推移,时间会缩短(我关闭应用程序并再次打开它) ,它是〜700ms;冲洗并重复以获得类似的结果)。

Soooo我的问题是:如何改善应用加载时间?我很高兴第一次加载需要一点时间来处理所有事情 - 这没关系。但有没有办法可以将内容保存在内存中,或者至少将其置于可恢复状态,因此无论ActivityManager正在做什么都不需要这么长时间?我希望它是我可以打开的东西(可能必须长时间保持搜索或类似),做任何事情,并再次关闭它 - 因此它需要快速打开!

提前致谢:)

的Seb

3 个答案:

答案 0 :(得分:2)

onCreate中启动的后台线程中运行重型启动工作。 (AsyncTask对此有好处。)设计您的UI以在没有数据时显示有意义的内容(至少是一个不确定的进度条)。加载数据后,在AsyncTask中发布Runnable(或实现onPostExecute)以将UI更新为真实内容。

答案 1 :(得分:0)

正如Ted建议的那样,只做UI线程上的最小值。加载布局的时间过长,这意味着有一些启动方法需要很长时间(可能需要查询数据库,或者访问网络,以填充长ListView?)。

如果绝对需要该处理,则使用闪屏(带有“请等待加载数据”或类似标签)。

答案 2 :(得分:0)

使用Asyntasks类划分工作。如果您有一些始终相同的数据存储在数据库中,例如,下次打开应用程序时访问速度最快,并不时更新该内容。