我在做一个安卓手机短信应用。 我使用带有url=content:/sm/inbox
的ContentResolver从收件箱读取所有SMS。
但是,每当我在物理设备上启动应用程序(它有1000条短信)时,我的应用程序仍然需要大量的时间来加载所有的消息。
另一方面,我手机内置的短信应用程序会在我启动该应用程序时显示所有消息。 内置的短信应用程序是如何实现这一点的?
伊姆霍,
他们不会读所有的信息。 如果需要,可以使用唯一关键字按发件人分组进行查询。 这将给你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.
会给你发件人的名单。
此外,您可以将列表保存在您的数据中,并定期更新它。