2013-01-15 74 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

當然,這將是工作:)謝謝 –

相關問題