单声道Android跟踪应用程序意外崩溃的背景

时间:2013-03-24 23:47:47

标签: android background mono gps location

我们目前正处于Android位置跟踪应用的简单单声道测试阶段。应用程序选择一个“实体”来监视并触发继承ILocationListener类的服务。我们使用一个简单的计时器对象每3秒向Web API服务发送一次lat / long信息。该应用程序将位于手机的背景中,并在幕后跟踪GPS的位置信息。

我们遇到的问题是,在一段不确定的时间(有时是15分钟,有时是8小时)后,应用程序只是停止在后台跟踪,我们很难找到原因。打开应用程序时,行为可能会有所不同,在某些情况下,应用程序只会自行重启,其他实例会显示黑屏,就像UI已停止一样。我们目前的测试设备是三星Galaxy 3,但我们也使用了三星Ace 2,结果相同。

下面的代码是坚果壳中的背景跟踪代码。我们无法获得实际的错误细节,这使得此错误非常棘手。如果我发现有关它在后台崩溃的原因的任何进一步信息,无论是内存问题还是我将提供的UI停止。

public override void OnCreate()
{
        base.OnCreate();
        BusTimer = new System.Timers.Timer(3000);
        BusTimer.Elapsed += OnTimeEvent;
        isTracking = false;
        StartTracking();
        BusTimer.Start();
}

public void StartTracking()
{

        if (SystemProperties.EntityTrackingID == 0 && SystemProperties.EntityTrackingType != "Track Me")
        {
            return;
        }
        isTracking = true;

        //SETUP THE LOCATION VARIALBES
        if (_geocoder == null) { 
            _geocoder = new Geocoder(this); 
        }

        if (_locationManager == null)
        {
            _locationManager = (LocationManager)GetSystemService(LocationService);
        }

        var criteria = new Criteria() { Accuracy = Accuracy.Fine };
        string bestProvider = _locationManager.GetBestProvider(criteria, true);
        currentLocation = _locationManager.GetLastKnownLocation(bestProvider);
        _locationManager.RequestLocationUpdates(bestProvider, 3000, 1, this);
}

private void OnTimeEvent(object source, ElapsedEventArgs e)
{
        //LOG RECORD FOR CURRENT LOCATION
        if (currentLocation != null && isTracking)
        {
             PostData(currentLocation, DateTime.Now);
        }    
}

0 个答案:

没有答案