我想从服务XYZ调用非静态方法。服务由启动时的接收器启动。 有人有想法从这个正在运行的服务运行方法吗? 此论坛中的一个解决方案是使方法静态并使用单例模式执行。但还有另一种方法吗?也许用粘合剂?
// EDIT例如我有以下条款:
public class MyService extends Service{
.....
public void method(){
//TODO
}
}
public class MyBroadcastReceiver extends BroadcastReceiver{
.....
public void onReceive(Context context, Intent intent) {
String intentAction=intent.getAction();
if(intentAction.equals(Intent.ACTION_BOOT_COMPLETED)){
//start service
Intent serviceIntent = new Intent(context, MyService.class);
context.startService(serviceIntent);
}
else{
//TODO call method() in MyService
}
}
如何调用方法method()
?我知道我可以使用context.getSystemService()
系统服务进行投射。但是我如何获得自己的服务对象?
问候
答案 0 :(得分:4)
您可以使用setAction
在启动Service
的意图中为您的意图添加操作字符串。在您的服务onStartcommand
中,您可以提取意图的操作,并根据您可以在您的服务中执行该方法。
您将始终使用startService
向您的服务发送命令,这不会启动您的服务两次。它将启动一次,或者将新意图发送到服务。
因此,在启动完成部分中,您应该将意图操作设置为您想要的任何内容,并启动该服务 - 您可以完全删除else块。
在您的服务中实施onStartCommand
,提取意图的操作,并根据该操作执行您的方法。