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オブジェクトによって処理されます。したがって、HandlerfromActivityをtoに渡す必要がありますServiceMessengerそれはクラスを使用して行うことができます。

アクティビティ:

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 に答える