2013-04-14 61 views
2

我試圖找出實現監聽與和的onResume位置的onPause最好的方式。 盡我所能做到不是將其關閉上的onPause並重新連接上的onResume。但是,當我想要的是讓GPS在應用程序的持續時間內保持運行狀態時,我始終保持斷開連接 - 重新連接。當按下主屏幕(或其他應用程序正在中斷)時,可關閉GPS以節省電量。如何保持GPS開啓活動之間的切換時上不過關時,當按下「家」

任何想法?

謝謝。

+0

只有主要活動開始位置監聽器? –

回答

2

你的問題可以概括爲「我怎麼知道,當我的應用程序移入/出前景的?」我在以下兩種不同的應用程序中成功地使用了以下方法,這些應用程序需要識別此功能。

當您更改的活動,你應該看到生命週期事件的順序如下:

Activity A onPause() 
Activity B onCreate() 
Activity B onStart() 
Activity B onResume() 
Activity A onStop() 

只要這兩個活動都是你的,你可以用來追蹤您的應用程序是否是一個單例類前臺應用程序與否。

public class ActivityTracker { 

    private static ActivityTracker instance = new ActivityTracker(); 
    private boolean resumed; 
    private boolean inForeground; 

    private ActivityTracker() { /*no instantiation*/ } 

    public static ActivityTracker getInstance() { 
     return instance; 
    } 

    public void onActivityStarted() { 
     if (!inForeground) { 
      /* 
      * Started activities should be visible (though not always interact-able), 
      * so you should be in the foreground here. 
      * 
      * Register your location listener here. 
      */ 
      inForeground = true; 
     } 
    } 

    public void onActivityResumed() { 
     resumed = true; 
    } 

    public void onActivityPaused() { 
     resumed = false; 
    } 

    public void onActivityStopped() { 
     if (!resumed) { 
      /* If another one of your activities had taken the foreground, it would 
      * have tripped this flag in onActivityResumed(). Since that is not the 
      * case, your app is in the background. 
      * 
      * Unregister your location listener here. 
      */ 
      inForeground = false; 
     } 
    } 
} 

現在製作一個與此跟蹤器交互的基本活動。如果你所有的活動擴展這個基地的活動,您的跟蹤器將能夠告訴你,當你移動到前臺或後臺。

public class BaseActivity extends Activity { 
    private ActivityTracker activityTracker; 

    public void onCreate(Bundle saved) { 
     super.onCreate(saved); 
     /* ... */ 
     activityTracker = ActivityTracker.getInstance(); 
    } 

    public void onStart() { 
     super.onStart(); 
     activityTracker.onActivityStarted(); 
    } 

    public void onResume() { 
     super.onResume(); 
     activityTracker.onActivityResumed(); 
    } 

    public void onPause() { 
     super.onPause(); 
     activityTracker.onActivityPaused(); 
    } 

    public void onStop() { 
     super.onStop(); 
     activityTracker.onActivityStopped(); 
    } 
} 
+0

非常優雅的解決方案!我認爲API可以處理這個問題,但如果沒有它,我可以看到你的解決方案是正確的方法。我會對它進行測試,如果有效,我會將您的答案標記爲「已接受」。謝謝。 – Alon

+0

你不應該有超(在onStart)等在每個調用onStart()的onResume(),在onPause()和的onStop()在BaseActivitiy的? – Stochastically

+0

是的,你應該。我會更新這篇文章。 – Karakuri

相關問題