2015-02-17 53 views
0

我有點困惑。我想使用服務來註冊內容觀察者並阻止它停止。我應該在onCreate還是onStartCommand中註冊contentObserver?換言之,這些碼中的一個爲真:Android中的onStartCommand的真實用法

private ContentObserver smsObserver; 
public void onCreate() { 
    super.onCreate(); 
    smsObserver = new ObserverSms(getApplicationContext()); 
    getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smsObserver); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 
    return START_STICKY; 
} 

private ContentObserver smsObserver; 
@Override 
public void onCreate() { 
    super.onCreate(); 
    smsObserver = new ObserverSms(getApplicationContext()); 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 
    getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, smsObserver); 
    return START_STICKY; 
} 

或在onStart()?

每次使用onStartCommand打開頁面時,是否再次執行onCreate或onStart? 並且不在「return START_STICKY;」中返回導致在第二個代碼中停止contentObserver?

回答

1

startService後服務的初始化流程被稱爲:

構造函數 - >的onCreate - > onStartCommand

的onStartCommand都會被調用startService被調用後的時間。

但是,onCreate將只被調用一次。

通常,onCreate像構造函數一樣使用,因爲我們通常不實現服務的構造函數。

而onStartCommand是處理來自不知道是否有第二個startService的不同包或進程的每個startService請求。

就你而言,如果你只調用startService一次,它們將是一樣的。

+0

我不理解你。最後哪一個是正確的或更好的?我想永遠運行觀察者(直到用戶禁用它)。現在當我使用Observer時,過了一會兒觀察者放慢了電話。 – user3879722 2015-03-17 16:23:36

+0

我應該在哪裏註冊和取消註冊觀察者? – user3879722 2015-03-17 17:35:16

+0

我建議你在onStartCommand中註冊它,並在onDestroy中註銷它。但請記住,如果不僅有一個startService,則要處理多個onStartCommand。不要註冊兩次。 – 2015-03-21 05:35:53

相關問題