2011-03-17 95 views
1

我正在经历一些设计困境,我一直在瞄准Android 2.3.3并拥有一个ContentProvider的自定义实现。然后我有一类静态方法来抽象内容提供者 - 根据我的查询为我提供表示每个实体(行)的对象。有一段时间,我对这样的工作感到非常舒服,直到我开始想在一些地方使用整个系列,进行“打击测试”并绘制到屏幕上。然后,我对让对象表示保持最新状态感到头痛,并且此时已决定我需要退后一步并重新考虑在何处采取此操作。内容提供者:用静态外观包装?

正如我所说,我目前使用2.3.3,并认识到在3.0 CursorLoader克服了我遇到的很多问题。尽管如此,我仍然需要支持智能手机,所以除非有回报,否则我不能这样做。

作为一个临时解决方案,我开始注册notifyChange侦听器,以便可以用我的原始查询重建集合,但这会让我感觉CPU非常密集并且速度可能很慢。我还没有决定是否应该使用我的静态外观进行回滚,而是使用Activity中过时的managedQuery调用。

因此,我有两个问题:

1)是否有preferrable的方式,以避免对基于一个ContentProvider的收集工作的问题是什么?

2)您有任何关于在活动中使用原始游标的建议吗?我应该让它们脱离它们还是使用光标原样工作?我当然觉得在执行查询时他们应该在AsynTask中,但在那之后我可以在任何地方使用它们?

回答

1

好吧,我来做出决定,它的工作可靠。

1)是否有一个最好的方式,以避免 与反对基于一个 ContentProvider的一个 收集工作的问题是什么?

我决定采取的方法是正确的;在我的情况下,最好制作一个缓存而不是维护一个游标(托管或不)到ContentProvider;这使我可以重用方法并减少需要测试的代码量。 NotifyChange监听器是重要的,直到3.0+工作,这意味着我应该保证NotifyChange被调用 - 集中所有这些代码的另一个参数,以便它确实触发预期的更改。

2)您有任何关于在活动中使用 原始游标的建议吗?我应该使用 使对象脱离它们还是使用 原样使用光标?我 肯定觉得他们应该在一个 AsyncTask,同时执行查询, 但之后,我可以在任何地方使用他们 ?

在我的使用情况下,我已经决定它是想它是什么,我计划建立的问题 - 避免不必要的工作,相对于返回不必要的行&领域,并可能创建不必要的对象。如果我正在寻找创建条目名称和条目ID的地图,那么我不应该获得所有其他字段。从收集中抽象出来是很好的,但它必须是轻量级的,并考虑数据的使用方式 - 无论是一次性的还是可以重复使用的。重要的是它是为了表现而不是完整性而写的。

+0

我曾经想过的一个问题是静态的,这种方法使得代码的依赖性是隐含的。应该使用对象实例。这不会影响它在创建方法中使用的活动(不会使用params),但会影响异步任务和其他组件 – Uniqe 2011-05-26 11:03:58