2013-02-14 3 views
1

Я разрабатываю приложение, которое необходимо обрабатывать значения ускорения непрерывно в течение некоторого времени (около часа) - да, я действительно хотел бы сделать это именно так. Обработка включает в себя некоторые вычисления и обновление пользовательского интерфейса время от времени. Ускорение собирается внутри службы (переднего плана) - ускорение сбора данных должно происходить, если пользователь также минимизирует приложение.Обработка непрерывного ускорения Android в фоновом режиме

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

Сейчас я собираю данные ускорения в потоке пользовательского интерфейса (в Сервисе). Собранные данные передаются классу, который выполняет некоторые вычисления и на их основе транслирует Intent, который зарегистрирован в основной деятельности для обновления пользовательского интерфейса.

Должен ли я собирать данные ускорения в рабочем потоке в службе? (Возможно ли это)? Или мне нужно обработать в другой теме? (Как было бы лучшим способом сделать это, не голодая ни в потоке сбора пользовательского интерфейса/ускорения, ни в потоке обработки).

Спасибо!

ответ

1

Вы, безусловно, должны выполнять любую нетривиальную обработку в фоновом потоке. Самый простой способ звучит так, будто он просто помещает его в AsyncTask, который вызывается из существующего Service. Вы можете переместить вашу обработку на doInBackground. Другим вариантом было бы создание отдельного IntentService для обработки вашей обработки, но я думаю, что AsyncTask должно быть достаточно.

1

Попробуйте AsyncTask

public class AsyncTaskTestActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     new PostTask().execute(); 
    } 

    // The definition of our task class 
    private class PostTask extends AsyncTask<String, Integer, String> { 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     displayProgressBar("Working..."); 
    } 

    @Override 
    protected String doInBackground(String... params) { 
     do_background_Stuff(); 

     // call this method whenever you want to run something in the UI thread and then get back to processing 
     publishProgress(i); 
     } 
     return "All Done!"; 
    } 

    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
     updateProgressBar(values[0]); 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     super.onPostExecute(result); 
     dismissProgressBar(); 
    } 
    } 
} 
Смежные вопросы