Come fermare il mio servizio?

Si prega di vedere anche la modifica 2 (sotto)

Ho esteso NotificationListenerService ed ho implementato molti dei suoi methods, incluso il metodo onDestroy() , ma non il onBind() o onStartCommand() , in quanto non ne ho bisogno, per quanto ne so). Tuttavia, quando chiamo selfStop() onDestroy() non viene chiamato.

  • Video a schermo integer senza allungare il video
  • C'è un modo rapido per riconoscere i codici ASCII HTML in una string o TextView?
  • Errore durante l'analisi di Xml - android.os.NetworkOnMainThreadException
  • Impostazione di test di integrazione nel progetto Android-Gradle
  • disinstallare l'applicazione in silenzio con i privilegi di sistema
  • R.string.value Segnalazione android di aiuto
  • So che ci sono altri link là fuori di call selfStop() , ma non ho trovato alcuna soluzione per il mio problema.

    Il mio servizio viene avviato dal sistema utilizzando il seguente codice nel android-manifest :

     <service android:name=".NotificationListener" android:label="@string/service_name" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService" /> </intent-filter> </service> 

    Ancora una volta, quando cerco di call stopSelf() nel metodo onCreate() , se il metodo onDestroy() non viene chiamato … il servizio non viene distrutto.

    È costantemente in uso la RAM (lo so che è in esecuzione perché posso vederlo in Impostazioni -> Applicazioni -> Esegui (sul mio smartphone))

    Qualcuno sa perché stopSelf() non sia eseguito / eseguito? Devo fare qualcosa nel metodo onBind() (ad esempio modificare la costante restituita)? È anche ansible interrompere il mio service che extends NotificationListenerService , in modo che non sia in esecuzione prima che venga nuovamente richiamato dal sistema? Devo call unbind() prima di call stopSelf() ? In caso affermativo, quindi utilizzare quale Context e ServiceConnection ?

    Modifica 1

    Ecco il mio codice:

     public class Core extends NotificationListenerService { @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); Log.i("abc", "onCreateService"); prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); //check main switch state: check = prefs.getBoolean("mainswitch", true); Toast.makeText(Core.this, Boolean.toString(check), Toast.LENGTH_SHORT).show(); Log.i("abc", Boolean.toString(check)); if(check == false){ stopSelf(); } } @Override public void onNotificationPosted(StatusBarNotification sbn){} @Override public void onNotificationRemoved(StatusBarNotification sbn){} @Override public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); Log.i("abc", "onDestroyService"); } } 

    Modifica 2

    Se ho problemi a distruggere il mio servizio che estende il NotificationListenerService (vedi sopra), sarebbe intelligente creare un secondo service (ad esempio MirrorClass) che sostanzialmente rispecchia la NotificationListenerService ? Vorrei allora fare riferimento a quella class ei suoi methods dal servizio effettivo che estende NotificationListenerService . Presumibilmente, allora sarebbe più facile destroy come io l'ho iniziato (a differenza del servizio che estende NotificationListenerService che viene avviato / chiamato dal sistema Android stesso)

    Qualcosa come questo:

     public class Core extends NotificationListenerService { @Override public void onCreate() { // TODO Auto-generated method stub } @Override public void onNotificationPosted(StatusBarNotification sbn){ MirrorClass.mOnNotificationPosted(sbn) //This is the reference to the other class } @Override public void onNotificationRemoved(StatusBarNotification sbn){} 

    Sarebbe veramente apprezzato qualche guida / aiuto qui, sta cominciando a fare la mia testa in, grazie

  • Trasferimento di file complessi xml in android
  • rimuovendo gli elementi RecyclerView
  • Finestra di dialogo personalizzato di Android
  • Android: come modificare layout_x, layout_y in un AbsoluteLayout dynamicmente?
  • Come fare barra di ricerca personalizzata in android?
  • Come submit e ricevere SMS da app Android?
  • 3 Solutions collect form web for “Come fermare il mio servizio?”

    Provare a eseguire l'override onStartCommand() nel servizio con START_NOT_STICKY flag:

     @Override public int onStartCommand(Intent intent, int flags, int startId) { super.onStartCommand(intent, flags, startId); return START_NOT_STICKY; } 

    Crea un nuovo servizio che fa tutto il lavoro per te, invece di fare il lavoro in questo servizio che estende NotificationListenerService . Tutto quello che fai allora è utilizzare il metodo startService() una volta che si desidera eseguire un lavoro e presumibilmente invierai alcuni extras con tale intent contenente la notifica inviata. È quindi molto facile arrestare quel servizio (che fa il lavoro per te e non estende NotificationListenerService ) utilizzando il metodo stopSelf() . Arrestare il servizio NotificationListenerService utilizzando il metodo stopSelf() non funziona.

    Comporre il command

     stopSelf(); 

    a

     public int onStartCommand(Intent intent, int flags, int startId) { 

    Effettuare una variabile per verificare se il servizio deve essere interrotto.

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.