сервис замораживает активность? - PullRequest
0 голосов
/ 12 октября 2011

У меня есть служба, которая получает местоположение и отправляет его на сервер, также у меня есть действие, которое запускает и останавливает службу с помощью кнопки.Когда я запускаю сервис, все кнопки не работают, и через некоторое время действие силы закрывается, давая возможность подождать или закрыть.что может быть причиной проблемы?

1 Ответ

0 голосов
/ 12 октября 2011

Я делал что-то подобное раньше ... Я не публикую весь код, но главное.Это не будет работать, я просто хочу дать вам представление о том, что искать и как справиться с этим.Волшебство сделано в sendUpdatesToUI ... Я сохранил все неважные методы, которые переписываются при реализации LocationListener - вы знаете лучше, какой из них вам нужен.

class:

public class ServiceLocator extends Service implements LocationListener 
public static final String BROADCAST_ACTION = "my.app.isgreat";
private final Handler handler = new Handler();
private LocationManager locationManager;
Intent intent;

public void onCreate() {
    locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
    intent = new Intent(BROADCAST_ACTION);
}

public void onStart(Intent intent, int startId) {
    handler.removeCallbacks(sendUpdatesToUI);
    handler.postDelayed(sendUpdatesToUI, DEBUG_DELAY);

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            DEBUG_DELAY, 3, this);

}

@Override
public void onDestroy() {
    super.onDestroy();
    handler.removeCallbacks(sendUpdatesToUI);
    locationManager.removeUpdates(this);
    locationManager = null;

}

//Here is the second thread, that won'z freeze your UI
//DisplayLogginInfo() sets all the values you wanna send
private Runnable sendUpdatesToUI = new Runnable() {
public void run() {
    DisplayLoggingInfo();
    handler.postDelayed(this, DEBUG_DELAY);
}

};

private void DisplayLoggingInfo() {
    intent.putExtra("long", String.format("%.4f", lastLocation.getLongitude()));
    sendBroadcast(intent);
}

Вероятно, так не пойдет, потому что я выкинул все неинтересные вещи, но он должен дать вам представление о том, как запрограммировать местоположение, которое не замораживает ваш пользовательский интерфейс..

Веселись

...