1

一定時間 (約 1 時間) 継続的に加速度値を処理する必要があるアプリを開発しています - はい、本当にそのようにしたいと思います。処理には、いくつかの計算の実行と、UI の随時更新が含まれます。加速度は (フォアグラウンド) サービス内で収集されます。ユーザーがアプリを最小化すると、加速度の収集が発生するはずです。

私の質問は、これを実装するための最も適切なパターンは何ですか? 処理によってアプリの UI が応答しなくなることは望ましくありません。

現在、UI スレッド (サービス内) で加速度データを収集しています。収集されたデータは、いくつかの計算を行うクラスに渡され、それに基づいて 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 に答える