在 onLocationChanged 回調中,拿到座標處理完畢後,立即移除監聽器:
LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
// 1. 使用座標
updateUI(location);
// 2. 移除監聽,停止 GPS 省電
locationManager.removeUpdates(this); // this 指向當前 Listener 實例
locationManager = null; // 釋放引用
}
// ... 其他方法
};
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, listener);
removeUpdates 參數必須是**註冊時同一個 Listener 實例**;若用匿名內部類,在回調中用 this 即可。locationManager = null 幫助 GC 回收,避免洩漏。requestSingleLocationFix)。fused.getCurrentLocation(Priority.PRIORITY_BALANCED_POWER_ACCURACY, cancellationToken)
.addOnSuccessListener(loc -> { /* 自動只回調一次 */ });
無需手動管理 Listener 生命週期,代碼更簡潔安全。