我已閱讀this答案,在我的情況下它沒有用。測試START_STICKY服務
我已經創建了一個簡單的服務,它只是記錄方法名。我從我的活動運行它,並通過使用
adb shell am stopservice -n serviceComponent
onDestroy()
殺死它被稱爲上的服務。現在,我已經從onStartCommand()
返回Service.START_STICKY
;我等待系統重新啓動 服務,它從未重新啓動。
這是正確的行爲嗎?我已經通過this問題,但找不到可靠的答案。
public class SampleService extends Service {
private static final boolean LOG = true;
public static final String CALLER = "sample.service.caller";
/**
* called once when service is created.
*/
@Override
public void onCreate() {
super.onCreate();
if(LOG){
log("onCreate() -> thread: %s", Thread.currentThread().getName());
}
} // onCreate
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
if(LOG){
log(">>>>>> onStartCommand()");
}
if(LOG){
log("thread: %s", Thread.currentThread().getName());
}
if(LOG){
log("caller[%s]", intent.getStringExtra(CALLER));
}
if(LOG){
log("<<<<<< onStartCommand()");
}
return Service.START_STICKY;
} // onStartCommand
@Override
public void onDestroy() {
super.onDestroy();
if(LOG){
log("onDestroy() -> thread: %s", Thread.currentThread().getName());
}
Toast.makeText(this, "destroying", Toast.LENGTH_SHORT).show();
} // onDestroy
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
} // onBind
private void log(String format, Object... args){
Utils.log("SampleService", String.format(format, args));
} // log
} // SampleService
這是通過使用此代碼
Intent intent = new Intent(this, SampleService.class);
intent.putExtra(SampleService.CALLER, "main activity");
if(null == startService(intent)){
if(LOG){
log("startService -> %s", "service not found!");
}
} //
啓動服務後,adb shell dumpsys activity services | grep "com.mallaudin"
返回該
我啓動服務
ServiceRecord{8bc884d u0 com.mallaudin.services/.SampleService} intent={cmp=com.mallaudin.services/.SampleService} packageName=com.mallaudin.services processName=com.mallaudin.services baseDir=/data/app/com.mallaudin.services-2/base.apk dataDir=/data/user/0/com.mallaudin.services app=ProcessRecord{b1c1c5a 32017:com.mallaudin.services/u0a94}
現在我通過調用
adb shell am stopservice -n com.mallaudin.services/.SampleService
停止服務。它停止服務,onDestroy
被呼叫 。當我在手機中關閉服務列表中的服務時,觀察到同樣的行爲。Stopping service: Intent { cmp=com.mallaudin.services/.SampleService } Service stopped
當我使用
adb shell force-stop com.mallaudin.services
命令,停止服務,但onDestroy()
不叫。
我用'adb外殼殺死com.mallaudin.services'來殺死應用程序。它現在有效! – mallaudin