【问题标题】:Stopping a ContentProvider Request停止 ContentProvider 请求
【发布时间】:2014-09-18 02:06:25
【问题描述】:

我有一个长期运行的内容提供程序,基本上它在云中进行一些搜索并返回带有结果的光标。我的问题是取决于服务器的连接和负载。结果可能需要 5-7 秒才能返回。

如果我使用 Content Provider 进行预测性搜索,它似乎会阻止其他查询(来自同一活动),直到前一个查询返回。

关于如何取消提供者查询有什么建议吗?

我曾尝试使用 asyncTask & Thread,但无济于事。看来我仍然在提供程序(解析器)上被阻止

【问题讨论】:

    标签: android multithreading android-contentprovider android-contentresolver


    【解决方案1】:

    也许您应该仅将内容提供程序用于访问本地 SQLite 数据库并在服务中执行长操作。

    观看此视频:Google I/O 2010 - Android REST client applications。它是关于构建一个 REST 客户端应用程序,但您可以将类似的架构用于后台内容。

    【讨论】:

    • 其实想过这个。想要将结果公开给人员应用搜索。猜测内容提供商可以连接到服务。它基本上是在 Exchange GAL 搜索之后建模的。哪个是提供者。
    【解决方案2】:

    看起来在 JellyBean 中,有一个新的选项可以取消()内容提供程序查询。

    实际上我最终接受了您的建议,并重写了内容提供程序以将光标移至 sqlitedb,并使用意图服务来更新 db.. 工作得非常好..

    我确实遇到了一个问题,如果提供者被杀死,客户端似乎没有收到通知,并且可以继续发送服务意图而没有响应。有几种处理方法(在提供者中我可以更改使用原始 uri 进行广播事件,光标断开连接,但这有点慢)..

    最后我只是回答了我自己的问题

    Content Provider w/ Cursor - Gets Killed (how to notify client)

    【讨论】:

    • 我只是担心内容提供者内部的异常。你为什么担心内容提供者会在在你的代码之外被杀死?关于您对取消对内容提供商的查询的担忧,也许这会有所帮助:stackoverflow.com/questions/13740828/…
    • 您希望客户端知道提供者已被杀死的原因是因为对光标的引用将不再更新相关记录。所以客户端仍然会继续发送服务意图,但他们的光标不会更新。这样,他们可以检查提供者/游标是否仍然有效,如果没有则重新请求新的游标。至于担心我的代码之外的东西,人们有任务管理器,它们可以在技术上杀死提供者,带着光标。这有助于保持您的应用正常运行并获得最佳用户体验。
    • 在这种情况下,我只会告诉用户任务杀手一文不值而且有害。我也是,我一直在关注我的应用程序的很多用户体验。但是你做的比我难。我很佩服你的努力。我确信您的用户在您的应用上度过了愉快的时光:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多