Android,调用类方法AFTER从服务接收消息

时间:2013-01-26 16:24:13

标签: android service bundle handler message

好吧,我有服务,我有一个活动。他们通过消息进行交流(它必须与消息进行通信,所以请不要告诉我有关意图或其他事情的信息)。

我收到服务中的Bundle,一切都好。

现在我收到了Bundle,我想做点什么。我想从“SomeClass”调用一个方法,但我不能,因为我在“IncomingHandler”类中。

从IncomingHandler内部调用SomeClass的最佳方法是什么?

提前致谢

class SomeClass implements ServiceConnection {
    class IncomingHandler extends Handler {
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                    case MyService.MS_GET_SOMETHING:
                         Bundle received=msg.getData();
                         ...

2 个答案:

答案 0 :(得分:1)

如果你真的希望活动在服务上调用方法,那么就该了解AIDL,它允许Activity通过RPC机制对绑定服务进行函数调用。 Documentation found here.

答案 1 :(得分:0)

我已经实现了这个功能(活动中的服务调用方法):

服务发送广播消息。

Activity有一个本地嵌套的broadcastreceiver,可以调用父活动中的方法。

public class MainActivity extends Activity {
    private BroadcastReceiver myReceiver = null;

    class _RemoteTimeTrackerReceiver extends BroadcastReceiver {
        @Override
        public void onReceive (Context context, Intent intent) {
                            // call method in activity
            reloadGui();
        }
    }

    @Override
    public void onResume() {
        super.onResume();

        if (myReceiver == null)
        {
            myReceiver = new _RemoteTimeTrackerReceiver();
            IntentFilter filter = new IntentFilter(Global.REFRESH_GUI);
            registerReceiver(myReceiver, filter);
        }

        reloadGui();

    }

    @Override
    public void onPause() {

        if (myReceiver != null)
        {
            unregisterReceiver(myReceiver);
            myReceiver = null;
        }

        super.onPause();

    }

            void reloadGui() {}