Друзья,
Я создал фоновый сервис для Android, который вызывается каждые 2 минуты.Когда он вызван, он начинает прослушивать для LocationUpdates для GPS и NETWORK в течение 40 секунд.Извлечение полезной информации (широта, долгота, точность, провайдер ...) и отправка данных на сервер.
Когда я запускаю приложение на эмуляторе, оно работает нормально.(Ну, я не получаю реальную информацию GPS, только значения по умолчанию всех переменных, но я знаю, что моя служба вызывается каждые две минуты и отправляет данные на сервер)
Поэтому, когда я запускаю приложение нареальное устройство, его работа идеально подходит для 40 минут.Тогда, я думаю, что-то закрывает мой сервис.(может быть, сам Android из-за памяти и т. д.)
Кто-нибудь знает, как я могу отследить ошибку, или даже что может быть этой ошибкой?:
private Runnable mUpdateTimeTask = new Runnable() {
public void run() {
Log.i(ctx.getString(R.string.app_name),
"HUJIDataCollectionService, mUpdateTimeTask1 start");
setuplistenerandrequestupdates();
mHandler.removeCallbacks(mUpdateTimeTask);
//! Log.i(ctx.getString(R.string.app_name),"HUJIDataCollectionService, mUpdateTimeTask stop");
}
};
private Runnable mUpdateTimeTask2 = new Runnable() {
public void run() {
Log.i(ctx.getString(R.string.app_name),"HUJIDataCollectionService, mUpdateTimeTask2 start");
// Send Data to Server here!!
sendDataToServer();
// Remove LocationUpdates here!!!
managerS.removeUpdates(listenerS);
mHandler.removeCallbacks(mUpdateTimeTask2);
//! Log.i(ctx.getString(R.string.app_name),"HUJIDataCollectionService, mUpdateTimeTask2 stop");
}
};
private TimerTask startServiceTask = new TimerTask() {
@Override
public void run() {
Log.i(ctx.getString(R.string.app_name),"HUJIDataCollectionService, startServiceTask, run()1");
// Start Locationupdates here!!!!
longitude = 0;
latitude = 0;
locationprovider = "";
locationproviderConverted = 0;
locationAccuracy = 100000;
// remove old updates from timer tasks
mHandler.removeCallbacks(mUpdateTimeTask);
mHandler.removeCallbacks(mUpdateTimeTask2);
mHandler.postDelayed(mUpdateTimeTask, 1000);
mHandler.postDelayed(mUpdateTimeTask2,
conf_LocationUpdatePeriodInSec * 1000);
}
};
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
//! Log.i(ctx.getString(R.string.app_name),"HUJIDataCollectionService, onStart");
ShowNotification();
LoadPreferences();
startDataCollectionServiceIntervallTimer = new Timer(
"HUJIDataCollectionServiceStartTimer");
startDataCollectionServiceIntervallTimer.schedule(startServiceTask,
1000L, conf_sampleTimeInMin * 60 * 1000L);
// Starting StopTimer(Thread) to stop listening for location updates
mHandler = new Handler();
}
private void setuplistenerandrequestupdates() {
//! Log.i(ctx.getString(R.string.app_name),"HUJIDataCollectionService, setupListenerAndRequestUpdates");
managerS = (LocationManager) ctx
.getSystemService(Context.LOCATION_SERVICE);
//! Log.i(ctx.getString(R.string.app_name), "HUJIDataCollectionService, 1");
listenerS = new LocationListener() {
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
}
@Override
public void onProviderEnabled(String arg0) {
}
@Override
public void onProviderDisabled(String arg0) {
}
@Override
public void onLocationChanged(Location location) {
// storing data from the latest location update
float tempLocLongitude = (float) location.getLongitude();
float tempLocLatitude = (float) location.getLatitude();
float tempLocAccuracy = location.getAccuracy();
String tempLocProvider = location.getProvider();
//Log.i(ctx.getString(R.string.app_name),
// "HUJIDataCollectionService, setupListenerAndRequestUpdates, location Changed");
// if accuracy of new location is better than existing, store
// accuracy,latitude,longitude and location provider
if ((tempLocAccuracy < locationAccuracy)
&& (tempLocAccuracy != 0.0)) {
// store current latitude
latitude = tempLocLatitude;
// store current longitude
longitude = tempLocLongitude;
// store current provider
locationprovider = tempLocProvider;
// store current accuracy
locationAccuracy = (int) tempLocAccuracy;
// converts the String value of locationprovider to the
// required integer value for the server
convertLocationProvider();
}
}
};
Большое спасибо, ребята !!!