Я прочел this Ответ, и это не полезно в моем случае.Тест START_STICKY service
Я создал простой сервис, он ничего не делает, кроме имен методов журналов. Я бегу это от моей деятельности и убить его с помощью
adb shell am stopservice -n serviceComponent
onDestroy()
называется на службу. Теперь, когда я вернусь Service.START_STICKY
от onStartCommand()
; Я жду, когда система перезапустит сервис, и он никогда перезапускается.
Это правильное поведение? Я прошел через 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 shell am kill com.mallaudin.services', чтобы убить приложение. Он работает сейчас! – mallaudin