Почему моя активность все еще отстает, когда я запускаю вещи в методе service и handler.post? - PullRequest
1 голос
/ 18 ноября 2010

Я запутался, почему моя деятельность все еще отстает, я использую удаленный сервис, у которого мало методов, и у каждого своя работа, такая как загрузка данных, обработка данных, сравнение данных и т. Д. Он будет работать в фоновом режиме и обновлять данные через определенные промежутки времени и уведомлять пользователя об изменениях через систему уведомлений.

Причина, по которой удаленный сервис, потому что я в конечном итоге добавлю виджет, а сервис должен оставаться запущенным, даже если android убивает активность, поэтому я привязываю его к каждому onPause (). Но насколько я понимаю, эта часть не вызывает мою проблему.

Но вернемся к моей проблеме ... так что моя активность все еще отстает, когда я запускаю вещи в сервисе и методе handler.post.

вот код:

public class WarnService extends Service {

  private Bitmap pic;
  private boolean dataUpToDate;

  private void loadData(){
    //code that downloads new data and sets the dataUpToDate variable
  }

  private void updateLayer(Bitmap bt){
    //code that updates some stuff if downloaded and local data differ
  }

  private IWarnService.Stub WServiceStub = new IWarnService.Stub() {

    @Override
    public void refreshData() throws RemoteException {
      serviceHandler.post(new Runnable() {

        @Override
        public void run() {
          loadData();
          if(!dataUpToDate){
            updateLayer(pic);
          }
        }
      });   
    }

  }
}

Также я хотел бы добавить progressDialog, который будет обновляться в updateLayer (...), через Activity - слушатель этого сервиса, но это не работает. Каков наилучший способ обновления progressDialog? Всегда слушатель, обработчик, намерение или что?

Так как мне сделать это правильно?

Ответы [ 2 ]

1 голос
/ 18 ноября 2010

Если ваш сервис выполняет некоторую интенсивную обработку в фоновом режиме, то ваша активность может по-прежнему отставать.Попробуйте уменьшить приоритет потоков, которые вы используете в своем сервисе.У меня была похожая проблема в одном из моих проектов, я попытался установить приоритеты моих фоновых потоков в PRIORITY_BACKGROUND (или это была константа с именем, похожим на это), и это решило ее.

Редактировать: здесь вы можете прочитатьо приоритетах потоков: http://developer.android.com/reference/android/os/Process.html

0 голосов
/ 18 ноября 2010

Я забыл добавить тему и прикрепить к ней обработчик.Таким образом, отсутствующий код был:

private HandlerThread hThread;

@Override
public void onCreate() {
  super.onCreate();
  hThread = new HandlerThread("Processing thread");
  hThread.start();
  serviceHandler = new Handler(hThread.getLooper());
}

@Override
public void onDestroy() {
  super.onDestroy();
  hThread.getLooper().quit();
}
...