【问题标题】:Notify Activity in Android to refresh when data is updated更新数据时通知Android中的Activity刷新
【发布时间】:2015-08-27 08:58:53
【问题描述】:

我有一个后台服务,可以更新 Android 应用程序中的数据库。 在应用程序中会显示此数据,但我无法找到触发数据刷新的好方法。

最初我只是在每次视图恢复时刷新,但如果在显示视图时更新数据,这显然不起作用。

在 iOS 上,我使用通知,它在视图中注册,并在完成时由更新过程触发。有没有办法在 Android 中做类似的事情来从后台线程触发 UI 线程的更新?

【问题讨论】:

  • 您可以使用android的广播接收器组件来了解您想要的触发器
  • 您可以将 BroadCastReceiver 与自定义 intnet 一起使用。每当触发该自定义意图时,您都可以刷新数据。

标签: android multithreading


【解决方案1】:

您的 Activity 中的 BroadcastReciever 是从服务更新 Activity 的最佳方式。

活动:

 BroadcastReceiver br = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {

    }
}

之后,您只需在 Activity 中为它注册一些操作:

 public final static String BROADCAST_ACTION = "com.example.action";

 IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
registerReceiver(br, intFilt);

在您的服务中,您应该构建一个意图并调用 sendBroadcast。

服务:

Intent intent = new Intent(MainActivity.BROADCAST_ACTION);
sendBroadcast(intent);

【讨论】:

    【解决方案2】:

    如果您更新数据库并且使用ContentProvider 将数据保存到数据库,则无需使用BroadCastReceiver,那么每当ContentProvider 上的数据更改时,它应该通知数据已更改并且在您的活动中,您使用CursorLoader,然后通知加载程序并更新UI,这很容易做到,并且具有CursorLoader 将在后台运行线程的优点查看更多herehere

    【讨论】:

    • 感谢您的提示,我需要调查一下。这是一个比重新加载更优雅的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多