我的Android应用程序有两项活动:
MainActivity
,其中包含MsgActivity
MsgActivity
,其中包含一个后退按钮,以及来自以下查询的每个结果只有一个TextView
:Uri uri = Uri.parse("content://mms-sms/conversations?simple=true");
Cursor cursor = cr.query(uri, new String[] {}, "", new String[]{}, "date desc LIMIT 5");
完成需要最多2.5秒,所以为了避免每次启动MsgActivity
时等待,我想:
缓存查询结果/光标或
按下后退按钮时防止MsgActivity
被破坏。
有什么建议吗?
谢谢!
答案 0 :(得分:0)
如果希望结果始终在内存中,则可以将它们存储在静态对象中。它可能不是最优雅的解决方案,但它应该有效。
或者,如果您希望结果可以持续多次执行(可能不是您编写的内容),您可以将它们放在SQLite数据库中。
答案 1 :(得分:0)
要1:您不应该直接缓存Cursor
,但缓存结果应该没问题。缓存数据的常规方法是将其写入getCacheDir()
返回的目录中的文件。
至2:您可以通过覆盖Activity
来阻止onBackPressed()
在后退时被销毁。在这种情况下,您应该从那里开始MainActivity
(使用FLAG_ACITVITY_REORDER_TO_FRONT)
。您还应该使用此标记呼叫您的MsgActivity
。
除了使用所述标志之外,您还可以将活动设置为singleInstance
<activity android:launchMode="singleInstance" />
另一种解决方案是提前查询 - 执行查询,例如在AsyncTask
的{{1}}中,将其传递给MainActivity
编辑为1: 如果您只想缓存应用程序的生命周期,请将逻辑放在
中MsgActivity
字段和方法(您可能希望在static
类中执行此操作)或final
选择最适合您的选择,IMO没有最佳选择。