【问题标题】:WakeLock under-locked exception using cwac-locpoll使用 cwac-locpoll 的 WakeLock 未锁定异常
【发布时间】:2012-05-04 13:22:20
【问题描述】:

我正在使用 cwac-locpoll,它做得很好。但是,我的一些用户遇到了以下问题

java.lang.RuntimeException: WakeLock under-locked com.commonsware.cwac.locpoll.LocationPoller
at android.os.PowerManager$WakeLock.release(PowerManager.java:339)
at android.os.PowerManager$WakeLock.release(PowerManager.java:299)
at com.commonsware.cwac.locpoll.WakefulThread.onPostExecute(WakefulThread.java:59)
at com.commonsware.cwac.locpoll.LocationPollerService$PollerThread.onPostExecute(LocationPollerService.java:231)
at com.commonsware.cwac.locpoll.WakefulThread.run(WakefulThread.java:93)

这是我的LocationReceiver 类,如您所见,它只是通过帮助类将获得的位置存储在我的应用程序SharedPreferences 中。

public class LocationReceiver extends BroadcastReceiver {
    private static final String TAG = "LocationReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
    Bundle b = intent.getExtras();
        Location loc = (Location) b.get(LocationPoller.EXTRA_LOCATION);

        if (loc == null) {
            loc = (Location) b.get(LocationPoller.EXTRA_LASTKNOWN);

            if (loc == null) {
                Log.w(TAG, "Unable to get location. " + intent.getStringExtra(LocationPoller.EXTRA_ERROR));
            } else {
                Log.w(TAG, "Timeout getting location, using previous one " + loc);
            }
        } else {
            Log.i(TAG, "Got location " + loc);
        }

        // save location in preferences
        if (loc != null) {
            PrefsHelper.setLastLocation(loc.getLatitude(), loc.getLongitude());
        }
    }
}

我还使用了一个单独的 cwac-wakeful WakefulIntentService 来获取最后一个位置并做一些事情,但它们被设计为独立运行。换句话说:

  1. LocationReceiver 由 cwac-locpoll 调用以不时将最后一个已知位置存储在 SharedPreferences 中。
  2. WakefulIntentService (独立地)计划获取此位置并对其进行处理。

谢谢!

【问题讨论】:

    标签: android commonsware-cwac


    【解决方案1】:

    这很可能与您的BroadcastReceiver 无关。我需要将最近对 WakefulIntentService 的一些更改影响到 LocationPoller 以更好地处理边缘情况,例如 Android 摆脱该服务并稍后将其恢复的情况,这可能会有所帮助。

    我对此有filed an issue ——请跟踪该问题以获取有关何时发布修复程序的说明。鉴于此组件的性质,我需要进行长时间运行的测试,因此可能至少需要 24 小时才能发布补丁。

    【讨论】:

    • 感谢@CommowsWare 的快速响应。我一定会留意补丁。
    • 根据 CommonsWare 的回答,该问题似乎已在 v0.2.1 中得到解决和修复。自从切换到该版本后,我们没有遇到过这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2016-07-18
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多