从短期持续活动Android向服务发送消息

时间:2013-11-30 03:05:49

标签: android android-service android-broadcast

我有一个在后台运行的服务,每隔几分钟就会打开一个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。现在一切正常。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

mServiceMessenger这是您的服务发送消息吗?我的情况与你完全相同,但我的表现方式不同。

在我的Service上,我在此帖中注册了BroadcastReceiverhttps://stackoverflow.com/a/4805733/362298

然后,在我的活动中,每当我需要发送消息时,我只需致电:

Intent myIntent = new Intent("MY_ACTION_FOR_THE_SERVICE_TO_HANDLE");
//Put some extra here
sendBroadcast(myIntent);

在我的活动上调用finish()之前,我确实这样做了。您有没有理由不使用sendBroadcast