2016-09-01 3 views
4

Что такое флаг START_STICKY_COMPATIBILITY с точки зрения услуг Android. Документация упоминает егоSTART_STICKY_COMPATIBILITY в услугах

версию совместимости START_STICKY, которая не гарантирует, что onStartCommand (Intent, Int, Int) будет вызываться снова после того, как убит.

Что такое версия совместимости? И если его версия START_STICKY, то почему вызов onStartCommand() не гарантируется? И почему кто-нибудь будет использовать его, если он не гарантирует, что onStartCommand() когда-либо вызван после того, как служба будет убита?

+0

Возможный дубликат [START \ _STICKY и START \ _NOT \ _STICKY] (http://stackoverflow.com/questions/9093271/start-sticky-and-start-not-sticky) – piotrek1543

+0

@ piotrek1543 делает дубликат ответа всем 3 вопроса, которые я задал здесь? – Diffy

ответ

6

Реализация по умолчанию onStartCommand:

public @StartResult int onStartCommand(Intent intent, @StartArgFlags int flags, int startId) { 
     onStart(intent, startId); 
     return mStartCompatibility ? START_STICKY_COMPATIBILITY : START_STICKY; 
    } 

mStartCompatibility определяется следующим образом:

mStartCompatibility = getApplicationInfo().targetSdkVersion 
       < Build.VERSION_CODES.ECLAIR; 

В 1.6 версии Service нет реализации onStartCommand только onStart. В версии 2.1 они устарели onStart. Обратите внимание на разницу в параметрах, там был введен flags.

Посредством этого они будут поддерживать совместимость со старой системой (PRE Eclair), которая ожидает старое значение, а также поддерживает новое поведение в новых системах.

Смежные вопросы