Stoppen Sie den Hintergrunddienst Wenn die Anwendung zum Hintergrund geht

Ich habe Hintergrund-Service in meiner Android-App, ich beginne Service von MainActivity onResume () -Methode und es ist korrekt funktioniert.Aber wie kann ich den Dienst stoppen, wenn Benutzer drücken home button.Because derzeit, wenn Benutzer drücken home button dann Anwendung auf den Hintergrund zu bewegen und dann Benutzer öffnen einige andere App dann nach einiger Zeit meine Service-Methode heißt und app Kraft stop.Below ist mein Code für Start-Service –

Intent msgIntent = new Intent(mContext, MyBackgroundService.class); startService(msgIntent); 

Danke im Voraus.

BEARBEITET

In meinem Service verwende ich den Code –

  public void callAsynchronousTask() { final Handler handler = new Handler(); timer = new Timer(); TimerTask doAsynchronousTask = new TimerTask() { @Override public void run() { handler.post(new Runnable() { public void run() { try { callWebservice(); } catch (Exception e) { e.printStackTrace(); } } }); } }; timer.schedule(doAsynchronousTask, START_DELAY, DELAY); } @Override public int onStartCommand(Intent intent, int flags, int startId) { callAsynchronousTask(); return Service.START_NOT_STICKY; } @Override public void onCreate() { mContext = this; super.onCreate(); } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { super.onDestroy(); if(timer!=null){ timer.cancel(); } stopSelf(); } 

In meiner Tätigkeit benutze ich unten Code für Stop-Service –

 @Override protected void onStop() { try{ stopService(new Intent(this, MyBackgroundService.class)); isServiceRunning = false; } catch(Exception e){ e.printStackTrace(); } super.onStop(); } @Override protected void onPause() { try{ stopService(new Intent(this, MyBackgroundService.class)); isServiceRunning = false; } catch(Exception e){ e.printStackTrace(); } super.onPause(); } 

Aber mein Service läuft, während ich einige andere App und es Kraft Stop App.From Hintergrund Service Ich nenne einige Webservice und dann speichern Antwort von Service in der Datenbank.

  • Android-Anwendung als Dienst ohne Aktivität
  • Gibt es ein Äquivalent von Services von Android in iOS?
  • Phonegap / Cordova Plattform unabhängiger Hintergrund Service
  • Öffnen Sie Android App, indem Sie eine SMS senden?
  • Kann ein Hintergrunddienst ohne seine Hauptanwendung existieren?
  • Running Service und ruf seine Methode an?
  • Scheduling Alarm für jede Sekunde in Android 5.1
  • Android-Hintergrund-Dienst wird neu gestartet, wenn Anwendung getötet wird
  • 4 Solutions collect form web for “Stoppen Sie den Hintergrunddienst Wenn die Anwendung zum Hintergrund geht”

    Stoppen Sie den Dienst in onPause () und onStop ()

     mContext.stopService(new Intent(mContext, MyBackgroundService.class)) 

    Wenn wir die anderen Anwendungen öffnen, dann wird unsere Anwendung (die im Hintergrund war) aus dem Speicher gelöscht. Allerdings wird die gesamte Anwendung nicht entfernt, aber die einige unerwünschte Daten und Aktivitäten werden beendet. In Ihrem Fall wird die Aktivität, die aktualisiert werden soll, aus dem Speicher gelöscht und Ihr laufender Hintergrunddienst, wenn Sie versuchen, die Benutzeroberfläche zu aktualisieren, dann wird es durch das Werfen von NullPointerException abgestürzt.

    So speichern Sie bitte die Referenz der Aktivität (deren Benutzeroberfläche aktualisiert werden soll) in onCreate () und setzen Sie den Verweis auf null in finish () -Methode, dann überprüfen Sie diese Referenz im Hintergrunddienst, wenn es nicht null ist, dann aktualisieren Sie die Benutzeroberfläche ansonsten nein Aktualisierung

     // Global Class for saving the reference class GlobalReference{ public static <name_of_your_activity> activityRef; } 

    In deiner Tätigkeit

      onCreate(){ GlobalReference.activityRef = this; } finish(){ GlobalReference.activityRef = null; } 

    In Ihrem Hintergrund Service

     if( GlobalReference.activityRef != null){ // update the UI of your activity } 

    Hoffe, dieser Code wird Ihr Problem lösen. Glückliche Kodierung …

    Drücken Sie die Taste Start, um die Funktion OnPause () zu drücken. Override onPause () und call stopService: mContext.stopService (neue Absicht (mContext, MyBackgroundService.class))

     @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode==KeyEvent.KEYCODE_HOME){ Log.e("home key pressed", "****"); 

    // Schreiben Sie hier Ihren Code, um die Aktivität hier zu stoppen

      } return super.onKeyDown(keyCode, event); } @Override protected void onPause() { Log.e("home key pressed on pause", "****"); // writ your code here to stop your service 

    Super.onPause (); }

    Der obige Code wird behalten, ob der Benutzer die Home-Taste gedrückt hat oder nicht.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.