2010-06-11 76 views
13

我在使用startService的應用程序中啓動服務。如何獲取Android本地服務實例

我不想使用bindService,因爲我想自己處理使用壽命。

如何在不使用bindService的情況下獲得啓動服務的實例?我希望能夠獲得我在服務類中創建的處理程序,以便從活動中發佈消息。

謝謝。

/亨利克

回答

13

我不想使用bindService我 要處理的工作壽命時間 自己。

這並不意味着您必須避免bindService()。如果需要,請同時使用startService()bindService()

我怎樣才能得到,如果我不使用 bindService一個實例的 服務開始了嗎?

使用bindService()startService(),或使用單身。

+0

通過「使用單例」,你的意思是我應該在服務類中聲明我的方法是靜態的嗎? – Henrik 2010-06-11 18:47:47

+0

作爲bindService和startService的魅力。謝謝! – Henrik 2010-06-11 19:04:51

+2

@Henrik:FWIW,單身人士,我的意思是你有一個靜態引用到你的服務,放在服務的'onCreate()',在服務的'onDestroy()'中去掉。這會造成內存泄漏的風險,因此建議儘可能使用綁定。 – CommonsWare 2010-06-11 19:16:21

4

這裏的另一種方法:

import android.app.Service; 
import android.content.Intent; 
import android.os.IBinder; 

public class MyService extends Service { 
    private Binder binder; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     binder = new Binder(); 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return binder; 
    } 

    public class Binder extends android.os.Binder { 
     public MyService getService() { 
      return MyService.this; 
     } 
    } 
} 

onServiceConnected(...)可以施展它的參數​​並調用它getService()。這避免了對服務進行靜態引用的潛在內存泄漏。當然,你仍然必須確保你的活動沒有掛在參考文獻上。