我们目前正处于一个简单的单声道安卓位置跟踪应用程序的测试阶段。应用程序选择一个“实体”来监视并启动一个继承 ILocationListener 类的服务。我们使用一个简单的计时器对象每 3 秒向 Web API 服务发送纬度/经度信息。然后,该应用程序将位于手机的后台,并在后台跟踪来自 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);
}
}