以下服务是通过其他应用程序的按钮单击触发的(通过触发待处理的 Intent)。onStartCommand() 使用 send() 方法创建消息和调度。理想情况下,我希望每次单击按钮时都会调用 onStartCommand,因为挂起的意图用于在 buttonClick 上触发服务。
但是 onstartCommand() 只调用一次,第一次单击按钮。随后的按钮单击不会触发 onStartCommand()。
有趣的是,如果我评论这一行 replyTo.send(msg); 每次单击其他应用程序的按钮时都会调用 onStartCommand 。
因此,使用 android IPC Messenger 从服务内发送消息可能会导致问题。我确认消息成功到达目标应用程序。我是否缺少有关 Messages 的一些详细信息,例如阻止发送呼叫?
我从 onStartCommand() 返回“START_STICKY”,这也可能是原因。
欢迎任何有关正在发生的事情的见解。
//MyService.java
@Override
public void onCreate() {
// create RemoteViews -> rView
Intent intent = new Intent(getBaseContext(), MyService.class);
PendingIntent pendingIntent = PendingIntent.getService(getBaseContext(), 0, intent, 0);
rView.setOnClickPendingIntent(buttonId, pendingIntent);
//On click of the above button, this MyService will be started usingthe given pendingintent
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("debug","Service onStartCommand");
Message msg = Message.obtain(null, UPDATE_REMOTE_VIEW, rView);
try {
replyTo.send(msg);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return START_STICKY;
}
额外细节: Button 上的 pendingIntent(来自其他应用程序)是使用 setOnclickPendingIntent()(RemoteViews 类)设置的。