我有服务更新我的Android APP上的数据库。问题是,如果我没有明确调用“myAdapter.notifyDataChanged()”方法,那么APP本身的视图(listviews)将不会得到通知。我怎么能从服务中做到这一点?我没有提到适配器或持有它的活动。
我想要解雇我自己的自定义事件,但我不知道这是否可能在android中。我在API文档中找不到任何内容。
提前致谢!
答案 0 :(得分:3)
使用短信总线(LocalBroadcastManager
,greenrobot's EventBus,Square's Otto等。)
或者,使用Messenger
。
或者,将数据库包装在ContentProvider
中并使用CursorLoader
填充适配器,因为当您更改{{1}中的内容时,您将获得新的Cursor
(假设您正确实现了它)。
答案 1 :(得分:0)
优雅的方法是让您的活动使用bindService
绑定到服务。在此调用中,您需要提供一个自定义ServiceConnection对象,该对象具有一个名为onServiceConnected
的回调函数,您可以在其中获取指向服务的指针。
一旦有了指向Service对象的指针,就可以要求服务通知您(提供指针,回调,处理程序或任何其他机制)以在更新数据库时更新视图。
当您的活动开始时,通过此机制,它会连接到服务,当活动结束时(onPause()),您将断开与服务的连接。
这不是微不足道的,特别是如果你以前从未这样做过,但这种机制对任何类型的服务都非常有用。