我正在制作一个 Android 短信应用程序。我使用ContentResolver来URL = content://sms/inbox
读取收件箱中的所有短信。
但是,每当我在我的物理设备(有 1000 条短信)上启动应用程序时,我的应用程序仍然需要花费大量时间来加载所有消息。
另一方面,我手机的内置短信应用程序会在我启动应用程序后立即显示所有消息。内置的 SMS 应用程序如何实现这一点?
我正在制作一个 Android 短信应用程序。我使用ContentResolver来URL = content://sms/inbox
读取收件箱中的所有短信。
但是,每当我在我的物理设备(有 1000 条短信)上启动应用程序时,我的应用程序仍然需要花费大量时间来加载所有消息。
另一方面,我手机的内置短信应用程序会在我启动应用程序后立即显示所有消息。内置的 SMS 应用程序如何实现这一点?
恕我直言,
他们不会阅读所有消息。如果需要,您可以使用唯一关键字按发件人分组进行查询。这将为您提供大约 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.
会给你发件人名单。
此外,您可以将列表保存在数据中并定期更新。