android - 通用应用程序设计(IntentService/ContentProvider/AsyncTask)

标签 android sqlite

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .


3年前关闭。







Improve this question




我试图弄清楚对于访问多个 Web 服务并具有多个显示信息的 Activity 的应用程序的最佳通用设计是什么。

我实现最新的 Android 应用程序的方式如下。我有一个 IntentService接收来自 Activity 的请求以从 Web 服务获取信息。我的 Service通过 ResultReceiver 通知 Activity 关于请求的状态(开始/错误/完成)。调用 Web 服务,获取结果(xml/json)并解析后,我将这些信息放在 ContentProvider 中。 (由 sqlite 数据库备份)并使用 ContentResolver通知有关更改的任何 Activity 。 Activity 会收到有关更改的通知(一些使用 ContentObserver 和其他使用 SimpleCursorAdapter 并自动收到通知)。

现在,我的方法存在的问题:

  • 每次进入 Activity 时,我都会通过上述方法从 Web 服务请求信息,然后删除该特定表中的所有行,用新信息填充它并通知 Activity 。因此,如果用户按回然后再次进入,我会再次完成整个舞蹈。我想我应该在数据库中添加一些字段,以了解上次更新的时间等,但我不知道该怎么做。建议?我认为另一种选择是使用警报并以特定间隔触发更新。但就我而言,规范要求每次我进入 Activity 时检查网络服务。
  • 当我调用 Web 服务时,我在 Activity 中显示了一个不确定的进度条,覆盖其他 View (其中包含先前获取的信息,并且在 Web 服务调用完成之前位于数据库中),但用户可以开始与 View 交互这不好(信息可能会从数据库中消失)。有什么方法可以禁用交互?一个 ProgressDialog 浮现在脑海中。
  • 如果我在不同的 Activity 中快速移动,IntentService 会被以前的 Web 服务调用阻塞,并且需要更长的时间才能到达我最近的 Web 服务调用。我可以创建多个 IntentService对于每个网络服务,但我认为这不是它的目的。

  • 我觉得我所采取的方法对于这个特定的应用程序来说并不是最好的方法。它的部分灵感来自 Google I/O 应用程序(我无法理解所有内容,例如更新的 sqlite 字段等)。一种替代方法是在所有 Activity 中使用 AsyncTasks。但是我可以在哪里存储信息以便从其他 Activity 中访问?在 Application 的列表中?以及身份管理呢?

    我对您的意见/想法/建议非常感兴趣,以及如何使我的下一个应用程序更好、更有效地工作。

    最佳答案

    你检查过这个谈话吗? http://www.youtube.com/watch?v=xHXn3Kg2IQE

    我发现它是一个很好的灵感来源。
    基本上,他们建议构建一个服务助手(在你的情况下,你的 Intent 服务的服务助手)作为一个单例类。您可以跟踪正在进行的请求

    通过这种方式,您可以跟踪正在执行的每一种不同类型的正在进行的后台任务,并阻止任何其他同类请求。例如,如果您离开 Activity a 并进入 Activity b,并且他们要求相同的 Web 服务查询,您可以检查它是否由于 Activity a 仍在进行中。

    从我在 iosched 应用程序上看到的情况来看,如果 Activity 关闭,则获取结果会丢失。

    有一个清晰的日志说:
    Log.w(TAG, "Dropping result on floor for code " + resultCode + ": " + resultData.toString());
    我也不建议使用 asynctask,因为结果也会丢失。

    但是,请看一下演讲和幻灯片。

    关于android - 通用应用程序设计(IntentService/ContentProvider/AsyncTask),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4322819/

    相关文章:

    entity-framework - SQL逻辑错误或缺少数据库没有这样的功能: last_rows_affected

    SQL : Group All

    android - Firebase 存储 - 检索和显示图像

    Android (Firestore) : Unable to add or update or set (SetOptions. 合并) 已在 Firestore 中创建的文档中的字段

    android - 如何从当前 Activity 中获得结果然后返回到上一个 Activity

    sqlite - 调试 MonoTouch 时 iOS 模拟器上的错误 - 仅安装 4.3 时出现 3.2 SDK 错误?

    c - 为什么 sqlite 告诉我 "out of memory"?

    xamarin - SQLite.Net 数据库大小

    android - flutter 的 FCM 通知声音在发布中不起作用

    android - 多个 Dex : in Build Config Files 的问题