2017-03-03 6 views
0

geht Hey ich habe eine Anwendung, wo ich jetzt möchte, wenn die APP onPause oder onDestroy geht, weil ich eine bestimmte Funktion aufrufen möchte, wenn dies passiert. Ich habe versucht, die onPause in einer Aktivität zu überschreiben und diese Aktivität in allen Projekten erweitert, aber die onPause wurde bei jeder Migration zwischen Aktivitäten aufgerufen (was logisch ist), aber das ist nicht was ich will. Ich möchte wissen, wenn der Benutzer die App beendet oder unterbricht es Grüße (die Home-Taste drücken),Wie zu erkennen, wenn die App zu minimieren oder

+0

Sie möchten 'onStop() 'anstelle von' onPause()' hören. –

+1

Definieren Sie "Benutzer verlässt die App" .. Es gibt kein solches Konzept in android. ** edit: ** Sie können 'isFinishing()' innerhalb von 'onPause' überprüfen. Vielleicht ist es das, was Sie wollen. – Selvin

+0

was ich meinte, ist, indem Sie die Home-Taste drücken (aus jeder Aktivität), oder den normalen Weg mit der Zurück-Button. im Fall der Zurück-Taste ist es einfach, ich kann die Onstop in der Master-Aktivität überschreiben, aber was ist mit Drücken der Startseite von jeder Aktivität –

Antwort

-1

Wenn der Benutzer die Anwendung beendet die onDestroy() Rückruf aufgerufen wird, wenn der Benutzer die Home-Taste die drückt onStop() Callback wird aufgerufen.

+0

Was ist, wenn ich eine andere Aktivität andere die eine diese beiden implementiert wurde –

+0

Sie können eine Basisaktivität erstellen und alle Ihre Aktivitäten werden erben von diesem und so können Sie die Callbacks von jeder Aktivität erkennen. –

-3

Es ist so einfach.

Sie können einfach überprüfen, indem Sie wie unten ein String-Variable unter:

static String active = "false"; 
**Thing to do :** 



if (active.equals("pause")) { 
         //do your pause task 
        } 

    @Override 
    public void onPause() { 
     super.onStart(); 
     active = "pause"; 
} 


    @Override 
    public void onStart() { 
     super.onStart(); 
     active = "start"; 
} 


    @Override 
    public void onDestroy() { 
     super.onStart(); 
     active = "destroy"; 
} 

das String-Variable Durch die Überprüfung, können Sie machen es möglich.

+0

Er fragt nach dem Status, wenn die gesamte Anwendung pausiert. Aber wenn Sie eine statische Zeichenfolge in die Aktivität überprüfen, wird dies nicht funktionieren, da onPause aufgerufen wird, wenn Sie eine neue Aktivität zu öffnen – Radon8472

0

in alle Ihre Aktivitäten:

@Override 
protected void onUserLeaveHint() { 
    super.onUserLeaveHint(); 
    Log.e("TAG", "Activity Minimized"); 
} 

in Ihrer Haupttätigkeit:

@Override 
public void onBackPressed() { 
    Log.e("TAG", "App Exit"); 
    super.onBackPressed(); 
} 

note: es gibt keine Möglichkeit, wenn App mit Aufgabe von System (zum Beispiel verlassen getötet zu erkennen Manager)

+0

Aktivität A => startet Aktivität B ... nicht von diesen würde aufgerufen werden ... aber Aktivität A wäre "minimiert" – Selvin

+0

@Selvin lesen Sie Frage sorgfältig, –

+0

ja, ich lese ... aber es scheint, dass Sie nicht wissen, die Aktivität/Application Lifecycle ... App kann in der zweiten Aktivität dann "App Exit" getötet werden nie angerufen und App ist tot ... Die einzige Antwort ist "es gibt kein Konzept der App in Android beenden" – Selvin

-1

So wollen Sie wissen, wann die ganze Anwendung in Bacground geht, die Methode von Activity.onPause sagt Ihnen wann Die Eindeutigkeit geht in den Hintergrund.

Für Ihre Bedürfnisse könnten Sie

auf Ihrem Android-Manifest hinzufügen. Dies ruft eine Klasse wie diese mit dem Namen "YourApplication"

z. für "onCreate" oder "onTerminate" der gesamten App (nicht für jede einzelne Aktivität). Aber Java-Dokumentation sagen, dass Sie nicht darauf vertrauen sollten, dass onTerminate auf jeder App aufgerufen wird zerstören (siehe: android.app.Application subclass, onTerminate is not being called).

Ich denke, dass der beste Weg ist, wenn Sie

  • eine eigene Methode „onPause“ hinzufügen und „onResume“, um Ihre Anwendungsklasse
  • in alle Ihre Aktivitäten Sie Application-Klasse speichern in, wenn onPause oder onResume heißt
  • und Sie rufen Sie eigene Application.onPause, wenn Sie alle Aktivitäten in "onPause"
  • sind und Sie Anwendung nennen.onResume wenn erste Aktivität ist zurück in „onResume“
+0

'OnTerminate' nie genannt –

+0

Als versuchen der zweite Teil meiner Lösung. – Radon8472

0

ich diese Methode verwenden, um festzustellen, ob die App in den Hintergrund geht oder getötet wird

Schritt 1: einen Service Stellen wie diese

public class OnClearFromRecentService extends Service { 

@Override 
public IBinder onBind(Intent intent) { 
return null; 

}

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
Log.d("ClearFromRecentService", "Service Started"); 
return START_NOT_STICKY; 

}

@Override 
public void onDestroy() { 
super.onDestroy(); 
Log.d("ClearFromRecentService", "Service Destroyed"); 

}

@Override 
public void onTaskRemoved(Intent rootIntent) { 
Log.e("ClearFromRecentService", "END"); 
//Code here 
stopSelf(); 

} }

Schritt 2) registrieren, diesen Dienst in manifest.xml

<service android:name="com.example.OnClearFromRecentService" android:stopWithTask="false" /> 

Schritt 3) Starten Sie dann diesen Dienst auf dem Splash-Aktivität

startService(new Intent(getBaseContext(), OnClearFromRecentService.class)); 

So jetzt, wenn Ihre App manuell getötet wird, wird die onDestroy Methode

aufgerufen werden Versuchen Sie dies auf Ihrem Code und lassen Sie mich wissen, wenn es funktioniert. Glücklich Coding :)

-1

Implement

Application.ActivityLifecycleCallbacks

in Ihrer Anwendungsklasse. Es wird folgende ActivityLifeCycle Methoden implementieren:

isActivityVisible() 
onActivityCreated() 
onActivityStarted() 
onActivityResumed() 
onActivityPaused() 
onActivityStopped() 
onActivitySaveInstanceState() 
onActivityDestroyed() 

und registrieren Sie den Callback-Hörer in OnCreate() der Anwendungsklasse wie:

registerActivityLifecycleCallbacks(this); 

eine globale Variable in Anwendungsklasse definieren.

private static boolean isActive;

Nun ist die Aktivität Lebenszyklus überschriebene Methode wie folgt ändern:

public static boolean isActivityVisible() { 
     return isActive; 
    } 

    @Override 
    public void onActivityCreated(Activity activity, Bundle bundle) { 

    } 

    @Override 
    public void onActivityStarted(Activity activity) { 

    } 

    @Override 
    public void onActivityResumed(Activity activity) { 
     isActive = true; 
    } 

    @Override 
    public void onActivityPaused(Activity activity) { 
     isActive = false; 
    } 

    @Override 
    public void onActivityStopped(Activity activity) { 

    } 

    @Override 
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) { 

    } 

    @Override 
    public void onActivityDestroyed(Activity activity) { 
      isActive = false; 

    } 

und Sie können die erforderlichen Operationen auf den Wert der isActive Variable auszuführen.

Verwandte Themen