游标查询需要2.5秒才能返回 - 需要一个解决方法

时间:2015-08-05 20:47:24

标签: android

我的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时等待,我想:

  1. 缓存查询结果/光标

  2. 按下后退按钮时防止MsgActivity被破坏。

  3. 有什么建议吗?

    谢谢!

2 个答案:

答案 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没有最佳选择。