发送消息未到达活动中的处理程序

时间:2013-01-21 16:41:10

标签: android

我正在接受服务和活动。内部服务我正在发送消息。 我试图在主要活动中捕获它。但是消息没有到达活动中的处理程序。

请参阅以下代码。

服务:

Handler handler = new Handler(Looper.getMainLooper());
    handler.sendEmptyMessage(112345);

MainActivity:

handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            Toast.makeText(MainActivity.this, "handled message successfully", Toast.LENGTH_SHORT).show();
            if ( msg.what == 1234 ) {
                Toast.makeText(MainActivity.this, "handled message successfully", Toast.LENGTH_SHORT).show();
            }
        }
    };

任何人都可以告诉我为什么它没有到达活动中的处理程序。 据我所知

1 个答案:

答案 0 :(得分:0)

您使用Handler.sendMessageXXX发送的所有邮件都将由同一Handler个对象处理。因此,您必须将HandlerActivity传递给Service。可以使用Messenger类来完成。

的活动:

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                Toast.makeText(MyActivity.this, "handleMessage " + msg.what, Toast.LENGTH_SHORT).show();
            }
        };

        final Intent intent = new Intent(this, MyService.class);
        final Messenger messenger = new Messenger(handler);

        intent.putExtra("messenger", messenger);
        startService(intent);
    }
}

服务:

public class MyService extends IntentService {
    public MyService() {
        super("");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        final Messenger messenger = (Messenger) intent.getParcelableExtra("messenger");
        final Message message = Message.obtain(null, 1234);


        try {
            messenger.send(message);
        } catch (RemoteException exception) {
            exception.printStackTrace();
        }
    }
}