как отобразить прогресс сервиса в андроид - PullRequest
0 голосов
/ 28 июля 2010

В моем приложении для Android я использую вид вкладок, поэтому у меня есть две вкладки: параметры и результаты.

пользователь вводит различные параметры на первой вкладке, а затем переключается на вторую вкладку для просмотра.результаты.

У меня есть служба, которая выполняет некоторые долгосрочные вычисления.пользователь вводит параметры на первой вкладке и нажимает кнопку «рассчитать».Они могут вносить коррективы и нажимать кнопку «Пересчитать», а служба обновляется новыми параметрами.

По мере выполнения этих расчетов я хочу, чтобы пользователь мог перейти на вкладку результатов, чтобы просмотреть результаты последнихрасчет.Затем они будут просматривать результаты и смогут переключаться обратно на вкладку параметров для внесения корректировок.

Я могу придумать два подхода:

- зарегистрировать «вкладку результатов» в службе икогда служба достигает вехи, она обращается непосредственно к «вкладке результатов».

- имеет таймер, работающий на «вкладке результатов», регулярно запрашивает привязанную службу и обновляет ее соответствующим образом.

Есть ли у людей комментарии или рекомендации для этих двух подходов?

Ответы [ 2 ]

1 голос
/ 28 июля 2010

AsyncTask имеет метод publishProgress, который позволяет без особых усилий передавать обновления из фоновой задачи в поток пользовательского интерфейса.

0 голосов
/ 12 апреля 2011

Использование широковещательного приемника

public class Detail extends GDActivity {

    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            if(intent.getAction().equals(DownloadService.CUSTOM_INTENT)) {
                mProgressDialog.setProgress(intent.getFlags());
            }
        }
    };

    // Flag if receiver is registered 
    private boolean mReceiversRegistered = false;
    // Define a handler and a broadcast receiver
    private final Handler mHandler = new Handler();

    @Override
    protected void onResume() {
      super.onResume();

      // Register Sync Recievers
      IntentFilter intentToReceiveFilter = new IntentFilter();
      intentToReceiveFilter.addAction(DownloadService.CUSTOM_INTENT);
      this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
      mReceiversRegistered = true;
    }

    @Override
    public void onPause() {
      super.onPause();

      // Make sure you unregister your receivers when you pause your activity
      if(mReceiversRegistered) {
        unregisterReceiver(mIntentReceiver);
        mReceiversRegistered = false;
      }
    }
}
}

и Отправитель

  @Override
    protected void onProgressUpdate(Integer... progress) {
        Intent i = new Intent();
        i.setAction(CUSTOM_INTENT);
        i.setFlags(progress[0]);
        ctx.sendBroadcast(i);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...