首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android GPS 定位獲取座標後自動停止監聽:removeUpdates 正確位置

     編輯:程式設計綜合問答

核心代碼位置

在 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 即可。
  • 若在多處註冊同一 Listener,需對應移除同樣次數。
  • 設定 locationManager = null 幫助 GC 回收,避免洩漏。
  • 若需單次定位,建議封裝為工具類並加入超時機制(見前文 requestSingleLocationFix)。

現代替代:FusedLocationProviderClient 單次請求

fused.getCurrentLocation(Priority.PRIORITY_BALANCED_POWER_ACCURACY, cancellationToken)
     .addOnSuccessListener(loc -> { /* 自動只回調一次 */ });

無需手動管理 Listener 生命週期,代碼更簡潔安全。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved