显示 android 联系人 + 电话号码的最佳做法

Posted

技术标签:

【中文标题】显示 android 联系人 + 电话号码的最佳做法【英文标题】:Best practice to show android contacts + phone numbers 【发布时间】:2011-10-09 14:32:48 【问题描述】:

从性能角度来看,用联系人及其电话号码显示 ListView 的最佳方法是什么?

将 CursorAdapter 与联系人光标一起使用,并在为每一行调用 bindView 时查询电话号码 将所有联系人和电话号码复制到后台线程中的内存数组中,然后使用 ArrayAdapter 显示它们。 其他解决方案?

【问题讨论】:

【参考方案1】:

在我看来,混合解决方案应该更好。 为什么会这样?因为您不知道或者假设在大多数情况下您不知道您的应用程序需要列出多少联系人以及需要列出多少联系人。还有多少联系人存储在手机中。如果我们知道这两个答案,我们当然可以采取最接近的解决方案。

所以我建议您首先在后台线程中使用内存中的数组引入固定数量的联系人,例如前 20 个。此外,如果您认为您的应用程序将对该服务执行多个请求..使用某种缓存会很棒。最糟糕的方法应该是一次又一次地调用联系人服务。 然后,对于联系人 #21 的请求,您可以带来下一个 20,依此类推。

所以你可以利用这两个世界的优点,同时尽量减少缺点。始终取决于我们正在讨论的应用程序和上下文。

【讨论】:

【参考方案2】:

我认为这取决于三个因素:

    我们在这里讨论了多少联系人? 加载每个联系人需要多少时间? (例如,您是否有一个非常复杂的视图需要放大,或者您是否获取需要任何网络 I/O 的联系人图像/等?) 一次向用户显示多少联系人?

虽然第二种解决方案也提供了一些优势,但您的解决方案之一将适合大多数情况:

解决方案 1:

优势:

    “随用随看”中的延迟视图膨胀可以在足够快地膨胀视图而不会出现任何明显的 UI 故障时表现良好。

缺点:

    如果您的联系人与大量数据相关联并且需要一些复杂的膨胀,您可能会注意到延迟。

    与解决方案 2 相比,灵活性和可扩展性较差。如下所述。

解决方案 2:

优势:

    您可以控制所有步骤,因此您可以轻松地模拟它,就像一个简单的一样,但添加东西可能更容易:搜索整个内存、自定义数组排序等。当您拥有一切时,它们会更好地工作查询到已经存在的数组。或者,如果您想稍后进行自定义加载,或者添加一些关于需要更多处理(例如网络 I/O)的联系人的更多数据,它可能比光标适配器稍微容易一些。

缺点:

    执行:这不是教科书式的执行方式。使事情更加定制需要你很好地处理所有线程并很好地处理初始外观。确保它可以缩放。

所以,是的,根据您的具体工作,选择合适的。

【讨论】:

【参考方案3】:

我认为http://www.higherpass.com/android/Tutorials/Working-With-Android-Contacts/ 将是一个选项。您可以在哪里找到您想要的所有设施...

【讨论】:

【参考方案4】:

我认为 CursorAdapter 是最好的解决方案。

还请确保您观看此视频http://www.youtube.com/watch?v=wDBM6wVEO70 它谈到了我认为使列表平滑滚动所必需的优化。

【讨论】:

以上是关于显示 android 联系人 + 电话号码的最佳做法的主要内容,如果未能解决你的问题,请参考以下文章

Android:在 Contact Uri 列表中显示所有有电话号码的联系人详细信息

Android通过电话号码有效地获取联系人姓名以在ListView中显示

在 Android 设备中使用 ACTION_PICK 意图仅显示带有电话号码的联系人

Android - 显示电话簿联系人并选择一个

存储 Android 联系人图标的技术

在 Android 中从电话簿中读取联系人