2013-01-15 34 views
2

我想从服务XYZ调用非静态方法。该服务在启动时由接收器启动。 有人有想法从这个正在运行的服务中运行方法吗? 在这个论坛中的一个解决方案是使该方法是静态的,并使用单例模式执行。但是还有另一种方法吗?也许用活页夹?如何从广播中运行的服务执行方法?

//编辑,比如我有以下clases:

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

我不确定你想要完成什么。当您通过服务进行广播时,您可以在任何活动活动中收听广播 - 当您收到广播时,您可以执行任何您想要的活动。如果您在接收广播时尝试在您的服务中运行某个方法,那么您也可以在没有单例的情况下执行该方法。 – jlindenbaum

+0

我的服务和我的广播都是独立的。在更新中,我有一个例子 –

回答

4

您可以在动作字符串添加到在启动Service意图使用setAction你的意图。在您的服务onStartcommand中,您可以提取意图的操作,并根据您的服务执行该方法。

您将始终使用startService向您的服务发送命令,这将不会启动您的服务两次。它将开始一次,或者新的意图被发送到服务。

因此,在您启动完成的部分中,您应该将意图操作设置为任何您想要的,然后启动服务 - 您可以完全删除else块。

在您的服务中实现onStartCommand,提取意图的动作,并根据该动作执行您的方法。

+0

当然,这将是工作:)谢谢 –

相关问题