我試圖找出實現監聽與和的onResume位置的onPause最好的方式。 盡我所能做到不是將其關閉上的onPause並重新連接上的onResume。但是,當我想要的是讓GPS在應用程序的持續時間內保持運行狀態時,我始終保持斷開連接 - 重新連接。當按下主屏幕(或其他應用程序正在中斷)時,可關閉GPS以節省電量。如何保持GPS開啓活動之間的切換時上不過關時,當按下「家」
任何想法?
謝謝。
我試圖找出實現監聽與和的onResume位置的onPause最好的方式。 盡我所能做到不是將其關閉上的onPause並重新連接上的onResume。但是,當我想要的是讓GPS在應用程序的持續時間內保持運行狀態時,我始終保持斷開連接 - 重新連接。當按下主屏幕(或其他應用程序正在中斷)時,可關閉GPS以節省電量。如何保持GPS開啓活動之間的切換時上不過關時,當按下「家」
任何想法?
謝謝。
你的問題可以概括爲「我怎麼知道,當我的應用程序移入/出前景的?」我在以下兩種不同的應用程序中成功地使用了以下方法,這些應用程序需要識別此功能。
當您更改的活動,你應該看到生命週期事件的順序如下:
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();
}
}
非常優雅的解決方案!我認爲API可以處理這個問題,但如果沒有它,我可以看到你的解決方案是正確的方法。我會對它進行測試,如果有效,我會將您的答案標記爲「已接受」。謝謝。 – Alon
你不應該有超(在onStart)等在每個調用onStart()的onResume(),在onPause()和的onStop()在BaseActivitiy的? – Stochastically
是的,你應該。我會更新這篇文章。 – Karakuri
只有主要活動開始位置監聽器? –