我们目前正处于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);
}
}