我坚持服务的棘手,真的需要一些帮助。这里我有一个方法来监听聊天消息并将其发送到ListAdapter:
@Override
public void processPacket(Packet packet) {
Handler mHandler = new Handler();
Message message = (Message) packet;
if (message.getBody() != null) {
String fromName = StringUtils.parseBareAddress(message.getFrom());
Log.i("XMPPChatDemoActivity ", " Text Recieved " + message.getBody() + " from " + fromName);
messages.add(fromName + ":");
messages.add(message.getBody());
// Add the incoming message to the list view
mHandler.post(new Runnable() {
public void run() {
setListAdapter();
这是我的Listadapter:
public static void setListAdapter() {
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, messages);
listview.setAdapter(adapter);
}
我需要将聊天消息检索代码放在永久服务中,并将消息发送到主活动,因为服务无法与UI交互。我知道一个处理程序可以完成这项工作,但是正如我尝试的那样,我会更加困惑。
答案 0 :(得分:3)
您可以使用Otto
之类的活动总线从MainActivity
向Service
发送更新。
就像kcoppock所说,你应该将你的消息保存在数据库中并使用ContentObserver
跟踪更改。
答案 1 :(得分:2)
如果您将消息存储在数据库中,您还可以添加ContentProvider
并让Activity
注册ContentObserver
进行更改。然后,您的Service
将只负责更新数据库,如果UI可见,它将检测更改。您可能最终只能使用LocalBroadcastManager
(在v4支持库中)执行某些操作来通知何时收到新消息;但是你仍然应该把信息永久地留在某处。