1

我正在开发一个需要连续处理加速度值一段时间(大约一个小时)的应用程序 - 是的,我真的很想这样做。处理涉及进行一些计算并不时更新 UI。加速度是在(前台)服务中收集的 - 如果用户也最小化应用程序,则应该会收集加速度。

我的问题是:实现这一点最合适的模式是什么?我不希望处理使应用程序 UI 无响应。

现在我正在 UI 线程(在服务中)收集加速度数据。然后将收集到的数据传递给一个类,该类进行一些计算并基于它们广播一个 Intent,该 Intent 注册在 Main 活动中以更新 UI。

我应该在服务的工作线程中收集加速度数据吗?(这甚至可能)?或者我应该在另一个线程中进行处理?(在不使 UI/加速收集线程或处理线程挨饿的情况下,最好的方法是如何做到这一点)?

谢谢!

4

2 回答 2

1

您当然应该在后台线程中进行任何重要的处理。最简单的方法听起来就像只是将它放入AsyncTask现有的调用中Service。您可以将处理移至doInBackground. 另一种选择是创建一个单独IntentService的来处理您的处理,但我认为AsyncTask应该足够了。

于 2013-02-14T18:38:20.483 回答
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();
   }
   }
}
于 2013-02-14T22:04:24.797 回答