来自Android服务的NotifyDataChanged

时间:2014-02-18 15:35:35

标签: android service android-listview

我有服务更新我的Android APP上的数据库。问题是,如果我没有明确调用“myAdapter.notifyDataChanged()”方法,那么APP本身的视图(listviews)将不会得到通知。我怎么能从服务中做到这一点?我没有提到适配器或持有它的活动。

我想要解雇我自己的自定义事件,但我不知道这是否可能在android中。我在API文档中找不到任何内容。

提前致谢!

2 个答案:

答案 0 :(得分:3)

使用短信总线(LocalBroadcastManagergreenrobot's EventBusSquare's Otto等。)

或者,使用Messenger

或者,将数据库包装在ContentProvider中并使用CursorLoader填充适配器,因为当您更改{{1}中的内容时,您将获得新的Cursor (假设您正确实现了它)。

答案 1 :(得分:0)

优雅的方法是让您的活动使用bindService绑定到服务。在此调用中,您需要提供一个自定义ServiceConnection对象,该对象具有一个名为onServiceConnected的回调函数,您可以在其中获取指向服务的指针。

一旦有了指向Service对象的指针,就可以要求服务通知您(提供指针,回调,处理程序或任何其他机制)以在更新数据库时更新视图。

当您的活动开始时,通过此机制,它会连接到服务,当活动结束时(onPause()),您将断开与服务的连接。

这不是微不足道的,特别是如果你以前从未这样做过,但这种机制对任何类型的服务都非常有用。