2017-08-17 40 views
6

Występuje dziwne zachowanie z moim tłem Service działające na Androidzie O.Android O: Usługa nie jest zatrzymywana przez limity wykonywania w tle

Moja próbka aplikacja używa targetSdkVersion 26

mam prostą usługę, która po prostu drukuje się informacje o stanie i zostanie odtworzony za pomocą START_STICKY:

class ServiceTest : Service() { 

companion object { 
    private val TAG = "ServiceTest" 

    fun buildIntent(context: Context): Intent { 
     return Intent(context, ServiceTest::class.java) 
    } 
} 

override fun onBind(p0: Intent?): IBinder? { 
    return null 
} 


override fun onCreate() { 
    super.onCreate() 
    Log.d(TAG, "onCreate") 
} 

override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { 
    Log.d(TAG, "onStartCommand: startId = " + startId) 
    return START_STICKY 
} 

override fun onDestroy() { 
    Log.d(TAG, "onDestroy") 
    super.onDestroy() 
} 

} 

usługa jest uruchomiona w ramach działalności:

startService(ServiceTest.buildIntent(applicationContext)) 

Po uruchomieniu usługi i opuszczeniu aplikacji po naciśnięciu przycisku Wstecz, wszystko działa zgodnie z oczekiwaniami:

08-17 16:30:25.182 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onCreate 
08-17 16:30:25.184 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onStartCommand: startId = 1 
08-17 16:31:26.799 900-924/? W/ActivityManager: Stopping service due to app idle: u0a141 -1m1s629ms de.continental.android.androidoservicetest/.ServiceTest 
08-17 16:31:26.804 8980-8980/de.continental.android.androidoservicetest D/ServiceTest: onDestroy 

Ale jeśli uruchomię usługę; Opuść aplikację, naciskając przycisk Wstecz, a na końcu usuń aplikację z ostatniej listy aplikacji, przesuwając ją, moja usługa zostanie ponownie uruchomiona zgodnie z oczekiwaniami (z powodu START_STICKY). Ale usługa nie jest zabijana przez system operacyjny Android ze względu na ograniczenia operacji w tle po określonym czasie. Wygląda na to, że moja usługa działa nieprzerwanie i system operacyjny jej nie zatrzymuje.

08-17 16:23:13.090 8914-8914/de.continental.android.androidoservicetest D/ServiceTest: onCreate 
08-17 16:23:13.091 8914-8914/de.continental.android.androidoservicetest D/ServiceTest: onStartCommand: startId = 1 
08-17 16:23:18.600 900-3234/? W/ActivityManager: Scheduling restart of crashed service de.continental.android.androidoservicetest/.ServiceTest in 1000ms 
08-17 16:23:19.635 900-924/? I/ActivityManager: Start proc 8980:de.continental.android.androidoservicetest/u0a141 for service de.continental.android.androidoservicetest/.ServiceTest 
08-17 16:23:20.158 8980-8980/? D/ServiceTest: onCreate 
08-17 16:23:20.160 8980-8980/? D/ServiceTest: onStartCommand: startId = 3 

Czy ktoś napotkał ten sam problem lub ma jakieś wyjaśnienie?

+0

Jaki jest Twój targetSdkVersion? –

+0

targetSdkVersion to 26 – Christopher

+0

Podałem właśnie to pytanie. Widzę dokładnie to samo zachowanie. Czy to błąd? –

Odpowiedz