0

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

请看下面的代码。

服务:

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

主要活动:

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();
            }
        }
    };

谁能告诉我为什么它没有到达活动中的处理程序。我所知道的

4

1 回答 1

0

您发送的所有消息都Handler.sendMessageXXX将由同一个Handler对象处理。所以你必须通过Handlerfrom Activityto 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();
        }
    }
}
于 2013-01-21T17:31:58.193 回答