我有一個在AndroidManifest中註冊的服務的應用程序,可以在啓動時啓動。我通過一個意圖接收器BOOT_COMPLETED來做到這一點,並且這工作正常。但是,如果用戶在安裝後立即啓動應用程序,我想從主Activity啓動服務,因爲它可能沒有運行。啓動可能從啓動時運行的服務活動
我不確定最好的方法來做到這一點。我知道我可以從activity中調用startService(),並且可以工作,但是我可以運行多個服務實例。我不想首先停止服務,因爲如果它正在運行,我只是希望該實例繼續運行。該服務可能處於任務的中間,我不希望它停止。
在活動時間:
Intent serviceIntent = new Intent();
serviceIntent.setAction(MessageReceiverService.ClassName);
startService(serviceIntent);
Android清單registeing意圖:
<receiver android:name="com.app.proto1.service.StartupIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
我服務過載的方法:
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(Tag, "onCreate()");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(Tag, "onDestroy()");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(Tag, "onStart()");
this.registerReceiver(new SmsReceiver(), new IntentFilter(SMS_ACTION));
}
有沒有一種方法可以檢查服務是否已經運行而不是重新啓動,而不會破壞現有的?
與活動不同,不存在多個服務實例。爲了達到完全相同的目的,我的主要活動以完全相同的方式啓動我的服務。你應該都準備好了。 – jsmith