2010-07-06 25 views
9

Ich bin ein Neuling auf Android. Ich habe Client-Server-basierte Anwendung. Der Server sendet die Update-Benachrichtigungen nach jeder Minute an den Client und auf der Client-Seite erhält meine App diese Updates und zeigt sie mit Toast an. Aber jetzt ist mein Problem immer, wenn meine Client-App in den Hintergrundserver geht, sendet weiterhin die Update-Benachrichtigungen und mein Client zeigt es an, als ob die Anwendung im Vordergrund ist. Ich bekomme nicht, wie man überprüft, dass Anwendung im Hintergrund läuft.Android: Wie überprüft man, ob die Anwendung im Hintergrund läuft

Antwort

8

http://developer.android.com/guide/topics/fundamentals.html#lcycles ist eine Beschreibung des Lebenszyklus einer Android-Anwendung.

Die Methode onPause() wird aufgerufen, wenn die Aktivität in den Hintergrund tritt. Sie können also die Update-Benachrichtigungen in dieser Methode deaktivieren.

+0

Dies wird auch Benachrichtigungen deaktivieren nicht gesendet werden, wenn eine andere Aktivität von dieser Aktivität gestartet wird. –

+0

In meinem Projekt habe ich zu viele Aktivitäten, um zu wissen, wie App im Hintergrund ist? –

36

-Update finden Sie diese zuerst:

Checking if an Android application is running in the background


Um zu überprüfen, ob Ihre Anwendung in den Hintergrund gesendet wird, können Sie diesen Code auf onPause() auf jede Aktivität in Ihrer Anwendung aufrufen können:

/** 
    * Checks if the application is being sent in the background (i.e behind 
    * another application's Activity). 
    * 
    * @param context the context 
    * @return <code>true</code> if another application will be above this one. 
    */ 
    public static boolean isApplicationSentToBackground(final Context context) { 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
     return true; 
     } 
    } 

    return false; 
    } 

Damit dies funktioniert, sollten Sie dies in Ihreaufnehmen

<uses-permission android:name="android.permission.GET_TASKS" /> 
+1

ich habe keine worte ........... toll !!!! – GOLDEE

+1

Hallo @peceps Ich möchte Sie informieren, dass mit Android 4.4 (oder N5) diese Methode nicht richtig funktioniert. topActivity und Kontext-Pakete sind gleich ... Können Sie bitte Ihre Antwort aktualisieren? – StErMi

+0

@StErMi http://stackoverflow.com/questions/3667022/android-is-application-running-in-background – Raheel

2

Nur für API-Ebene 14 und über

Sie ComponentCallbacks2 zu einem activity, service verwenden können usw.

Beispiel:

public class MainActivity extends AppCompatActivity implements ComponentCallbacks2 { 
    @Override 
    public void onConfigurationChanged(final Configuration newConfig) { 

    } 

    @Override 
    public void onLowMemory() { 

    } 

    @Override 
    public void onTrimMemory(final int level) { 
    if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) { 
     // app is in background 
    } 
    } 
} 
Verwandte Themen