繁体   English   中英

Windows Phone 8 - Geolocator PositionChanged监听器在一段时间后死亡

[英]Windows Phone 8 - Geolocator PositionChanged listener dies after some time

我正在使用Geolocator对象设置PositionChanged侦听器

var geolocator = new Geolocator();
geolocator.PositionChanged += Geolocator_PositionChanged;

它工作正常一段时间。 但经过一段时间没有用户互动(+ - 4小时)它停止接收位置变化,我认为因为WP8只是杀死它。 这可能是从ms开始的,但这对我的app模型来说太可怕了。

我所做的是另外设置PeriodicTask并发送位置。 这样运行没有任何问题,但如果用户改变他的位置,我无法真正跟踪它。

问题是:无论如何在没有用户交互的情况下唤醒这个Geolocator? 它可以通过PeriodicTask甚至是PositionChanged。

我已经尝试在PositionChanged委托中已经实例化了一个新的Geolocator,但这不起作用。

很感谢任何形式的帮助。 谢谢!

它似乎是某种GC杀死/禁用该实例。

尝试使用geolocator.addEventListener("statuschanged", onStatusChanged);

当状态为Windows.Devices.Geolocation.PositionStatus.disabledWindows.Devices.Geolocation.PositionStatus.notAvailable时,重新启动对象。

请参阅Geolocator.StatusChanged | statuschanged事件了解更多详情。

希望我帮忙

您是否在GetGeopositionAsync调用中指定了超时? 根据在底部的最后一个注释这个帖子 ,这个代码修复了一个问题GetGeopositionAsync呼叫不返回。 它可能是相关的。

public Task GetCurrentPosition()
{

    return Task.Run(() =>
    {
        if (_geolocator == null)
        {
           _geolocator = new Geolocator { DesiredAccuracy = PositionAccuracy.High };
        }

        Geoposition geoposition = null;

        ManualResetEvent syncEvent = new ManualResetEvent(initialState: false);

        IAsyncOperation asyncOp = _geolocator.GetGeopositionAsync();

        asyncOp.Completed += (asyncInfo, asyncStatus) =>
        {
           if (asyncStatus == AsyncStatus.Completed)
           {
               geoposition = asyncInfo.GetResults();
           }

           syncEvent.Set();

        };

        syncEvent.WaitOne();

        return geoposition.Coordinate;

    });

}

可能垃圾收集器发现它未使用并且已杀死或至少禁用省电功能。

您使用的大多数硬件资源都有调用方法

addEventListener

这是一种通知该资源的方式:“嘿!我想得到你的更新,所以不要死”。 这是观察对象并异步获取更新的非常常见的模式。

请查看http://en.wikipedia.org/wiki/Observer_pattern

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM