2015-12-29 12 views
48

Ogni volta che si avvia una nuova istanza di debug, il servizio di accesso facilitato viene ripristinato allo stato disabilitato.Servizio di accessibilità disabilitato per ogni esecuzione di debug

C'è un modo per mantenerlo abilitato su successive esecuzioni di debug (dato che è piuttosto lungo il & noioso da abilitarlo ogni volta per eseguire il debug del servizio)?

Ho lo stesso comportamento su dispositivo reale ed emulatori.
Non c'è eccezione nel servizio, ho provato l'evento senza codice nel gestore eventi.

Non ci sono linee di sospetti nei miei ceppi:

10:47:32.801 31669-31669/? E/AffinityControl: AffinityControl: registerfunction enter 
10:47:32.821 3650-3690/? I/ActivityManager: Force stopping com.test.testaccessibilityservice appid=10241 user=0: from pid 31669 
10:47:32.821 3650-3690/? I/ActivityManager: Killing 31271:com.test.testaccessibilityservice/u0a241 (adj 1): stop com.test.testaccessibilityservice cause from pid  
10:47:32.821 3650-3690/? W/ActivityManager: Scheduling restart of crashed service com.test.testaccessibilityservice/.MyAccessibilityService in 1000ms 
10:47:32.821 3650-3690/? I/ActivityManager: Force stopping service ServiceRecord{3f5e1fc4 u0 com.test.testaccessibilityservice/.MyAccessibilityService} 

Quindi il servizio è interrotto e forza mai rinnovate.

Note:

  • Se riparto il telefono, il servizio è avviato.
  • Ho lo stesso comportamento con la ApiDemos sample e ClockBackService (QueryBackService troppo):

    18:07:15.871 3523-4251/? I/ActivityManager: Force stopping com.example.android.apis appid=10242 user=0: from pid 19382 
    18:07:15.871 3523-4251/? I/ActivityManager: Killing 16542:com.example.android.apis/u0a242 (adj 1): stop com.example.android.apis cause from pid 19382 
    18:07:15.871 3523-4251/? W/ActivityManager: Scheduling restart of crashed service com.example.android.apis/.accessibility.ClockBackService in 1000ms 
    18:07:15.871 3523-4251/? I/ActivityManager: Force finishing activity 3 ActivityRecord{2f907c7b u0 com.example.android.apis/.ApiDemos t8248} 
    18:07:15.881 3523-4251/? I/ActivityManager: Force finishing activity 3 ActivityRecord{190ca05c u0 com.example.android.apis/.ApiDemos t8248} 
    18:07:15.881 3523-4251/? I/ActivityManager: Force finishing activity 3 ActivityRecord{27ada6e8 u0 com.example.android.apis/.accessibility.ClockBackActivity t8248} 
    18:07:15.881 3523-4251/? I/ActivityManager: Force finishing activity 3 ActivityRecord{51f4c32 u0 com.android.settings/.Settings$AccessibilitySettingsActivity t8248} 
    18:07:15.881 3523-4251/? I/ActivityManager: Force stopping service ServiceRecord{113bf024 u0 com.example.android.apis/.accessibility.ClockBackService} 
    18:07:15.891 19382-19382/? D/AndroidRuntime: Shutting down VM 
    

Ho cercato di tornare START_STICKY ridefinendo onStartCommand senza alcuna variazione.

È molto chiuso a questa vecchia domanda senza risposta How to debug accessibility service?, ma nel mio caso, il servizio appare disattivato, e non ho bisogno di fermarlo e ricominciare.

Ho compilato this bug report on AOSP.

+0

Faccio lo sviluppo di servizi di accessibilità tutto il tempo e non ho mai visto questo comportamento. Testato su Droid Ultra, Nexus 5, 7, 9, Droid Turbo e tutte le varianti della scheda Samsung Galaxy. Il servizio potrebbe essere interrotto in modo inappropriato. Hai provato a guardare i log LogCat completamente spenti e cercare rapporti/eccezioni sugli arresti anomali? La gestione degli errori di servizio e l'uscita non è così pulita come lo sviluppo di applicazioni generali. – ChrisCM

+0

Aggiungo alcuni registri e aggiorno la mia domanda con alcuni dettagli. Avete gli stessi registri (riavvio della pianificazione e dell'uccisione)? –

+0

La seconda occorrenza di "Arresto forzato" (ultima riga nel registro) mi sembra sospetta. – ChrisCM

risposta

1

Questo potrebbe in qualche modo a spiegare e mitigare il vostro problema (ma non ciò che provoca il vostro Force stop).

Dopo Android 3.1 "il sistema imposta FLAG_EXCLUDE_STOPPED_PACKAGES su tutti gli intenti di trasmissione." Quindi, dopo 3.1, tutte le app vengono fermate all'avvio. Perché ?. Per motivi di sicurezza.

Ci sono REGOLE per spegnere la bandieraFLAG_EXCLUDE_STOPPED_PACKAGES.

(1) Se l'app è un Force stop da impostazioni o unresponsive app pulsante, viene impostato il flag.

(2) La vostra applicazione deve essere in Phone Storage, NONexternal storage (ad esempio sdcard) altrimenti il ​​flag. Il BOOT_COMPLETE viene inviato prima dello viene installata la memoria esterna. Quindi, se l'app è installata nella memoria esterna, non riceverà il messaggio di trasmissione BOOT_COMPLETE.

(3) Se l'applicazione non è mai stata eseguita, il flag è impostato (mai è relativo allo stato di avvio corrente; O) NON significa MAI in questo avvio OPPURE hai invalidato il flag nell'ultimo stato di avvio).

Un modo rapido (con script, se volete) per riattivare il servizio dopo Force stop assumendo BOOT_COMPLETED ricevitore (sto cercando di indovinare che hai questo, perché il tuo bene dopo il riavvio):

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" 

adb shell am broadcast -a android.intent.action.BOOT_COMPLETED 

See launchcontrols

+0

Penso che tu abbia omesso il problema. Il problema non è il riavvio, è su ogni esecuzione di debug. –

+0

No, aggiungo che per * completezza *, il numero di rilascio (1) è circa ** chiusura forzata ** e il ** FLAG_EXCLUDE_STOPPED_PACKAGES ** –

+0

Siamo spiacenti ma continuo a pensare che sia irrilevante qui, il problema riguarda il servizio di accessibilità. Una risposta fornirà un modo per risolvere questo particolare tipo di problema. –