我正在接受服务和活动。内部服务我正在发送消息。 我试图在主要活动中捕获它。但是消息没有到达活动中的处理程序。
请参阅以下代码。
服务:
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();
}
}
};
任何人都可以告诉我为什么它没有到达活动中的处理程序。 据我所知
答案 0 :(得分:0)
您使用Handler.sendMessageXXX
发送的所有邮件都将由同一Handler
个对象处理。因此,您必须将Handler
从Activity
传递给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();
}
}
}