【问题标题】:How is my Android phone's inbuilt SMS app so fast?我的安卓手机内置短信应用程序怎么这么快?
【发布时间】:2020-11-22 01:25:17
【问题描述】:

我正在制作一个 Android 短信应用。 我使用 ContentResolverURL = content://sms/inbox 来读取收件箱中的所有短信。

但每当我在我的物理设备(有 1000 条短信)上启动应用程序时,我的应用程序仍然需要花费大量时间来加载所有消息。

另一方面,我手机的内置短信应用程序会在我启动应用程序后立即显示所有消息。内置 SMS 应用程序是如何实现这一点的?

【问题讨论】:

    标签: android android-sqlite android-contentresolver smsmanager android-sms


    【解决方案1】:

    恕我直言,

    他们不会阅读所有消息。如果需要,您可以使用唯一关键字按发件人分组进行查询。这将为您提供大约 100-200 个条目的列表。这对于第一个屏幕来说已经足够了。 (可选)之后,您请求 5 个最近的发件人消息以预加载它们以加快读取访问速度。然后,在选择发件人时,您只加载发件人消息(甚至可能只是最后 50 条)。

    基于此 URL:https://developer.android.com/reference/kotlin/android/content/ContentResolver 您有参数“QUERY_SORT_DIRECTION_DESCENDING、QUERY_ARG_LIMIT、QUERY_ARG_SQL_GROUP_BY”可以帮助您找到唯一的发件人。 您也可以考虑使用不同的提供商,例如 ContentProvider。

    更新: 我只能给你举例说明如何在 SQL 中做到这一点。比如:

    select * from inbox GROUP BY sender.
    

    会给你发件人名单。

    此外,您可以将列表保存在数据中并定期更新。

    【讨论】:

    • 我犯了一个严重的错误,每次我的应用程序启动时都尝试加载所有消息。您的回答帮助我了解了我应该如何去做。如果您有更多时间,您可以在答案中添加关于如何查询仅发件人组的单行字吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-05
    相关资源
    最近更新 更多