我有一个在后台运行的服务,每隔几分钟就会打开一个Activity。当活动打开时,用户按下需要向服务发送消息的按钮。问题是用户按下按钮后活动关闭。在Activity可以绑定到服务之前,活动似乎已关闭,因此我无法使用Messenger发送消息。
处理此问题的最佳方法是让服务收听广播接收器,然后从我的活动中触发广播吗?
感谢您提供的任何帮助!
-Nathan
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.end_activity_button:
endActivity();
break;
}
}
private void endActivity() {
sendMessageToService(ActivityService.MSG_CANCEL_ACTIVITY);
getActivity().finish();
}
/**
* Send data to the service
*
* @param intvaluetosend The data to send
*/
private void sendMessageToService(int intvaluetosend) {
if (mIsBound) {
if (mServiceMessenger != null) {
try {
Message msg = Message.obtain(null, intvaluetosend, 0, 0);
msg.replyTo = mMessenger;
mServiceMessenger.send(msg);
} catch (RemoteException e) {
}
}
}
}
编辑我已经实施了里卡多的解决方案,但我使用的是localbroadcasts。现在一切正常。谢谢你的帮助!
答案 0 :(得分:0)
此mServiceMessenger
这是您的服务发送消息吗?我的情况与你完全相同,但我的表现方式不同。
在我的Service
上,我在此帖中注册了BroadcastReceiver
:https://stackoverflow.com/a/4805733/362298
然后,在我的活动中,每当我需要发送消息时,我只需致电:
Intent myIntent = new Intent("MY_ACTION_FOR_THE_SERVICE_TO_HANDLE");
//Put some extra here
sendBroadcast(myIntent);
在我的活动上调用finish()
之前,我确实这样做了。您有没有理由不使用sendBroadcast
?