2

加速度計、ジャイロスコープ、マイク、GPSなどのさまざまなセンサーからデータを取得する必要があります。検知アクションは継続的ではなく、さまざまなポリシー(たとえば、省電力)に従って、サンプリングの単一の短い間隔を定期的にスケジュールする必要があります。各センサーのサンプリングアクションは数秒、たとえば5秒続きます。必要に応じてセンサーデータのリッスンを代行するセンサーごとの「クライアント」と、クライアントの実行を制御する「コントローラー」を実現するのですが、どうやって実現するのかわかりません。

クライアントごとにサービスを実現するのは正しいですか?または、単純なAsyncTaskまたはHandlerの方が良いでしょうか?

各クライアントが単一のonStartService()で実行される単一のセンシングアクションを担当する場合、またはonStartService()アクションがサンプリングの定期的なアクションを有効にする場合はより良いですか?助けていただければ幸いです。

4

3 に答える 3

2

これは、(通常の)スケジュールされた間隔でsServiceによってトリガーされるのタスクのように聞こえます。Alarm

これAsyncTaskは通常、ユーザーが何らかの操作を行った後に開始されるものであり、システムは「長時間実行」操作(ネットワークI / Oなど)を実行することになっています。そうしないと、UIがブロックされる可能性があります。

AsyncTask-のようなサービスをトリガーすることも非常に可能であることに注意してください。を見てくださいIntentService

于 2012-10-28T16:50:54.807 に答える
2

ここで同様の質問に関する私の回答をご覧になることをお勧めします:Service v /sAsyncTask

個人的にはHandler、特定の時間間隔で実行するタスクを簡単に投稿します。

例:

private Handler mHandler = new Handler();

private void startTimer(Runnable Task, long delay) {  
    mHandler.removeCallbacks(Task);       
    mHandler.postDelayed(Task, delay);    
}

private void stopTimer(Runnable Task) {  
    mHandler.removeCallbacks(Task);       
}

private Runnable registerListeners = new Runnable() {
    public void run() {
        startTimer(registerListeners, 10*60*1000); //register to run again in 10 minutes
        startTimer(unregisterListeners, 5*1000); //to unregister in 5 seconds 
        //here register your listeners
    }
};

private Runnable unregisterListeners = new Runnable() {
    public void run() {
        //here unregister your listeners
    }
};

リスニングプロセスを開始する場合:

//To start you listeners
startTimer(registerListeners, 0);

すべてを止めたいとき:

//To stop registering/unregistering listeners
stopTimer(registerListeners);

注:リスナーで長時間実行されているコードを実行している場合は、上記のリンクにある回答を参照してください。

よろしく。

于 2012-10-28T17:43:09.227 に答える
0

Android開発者サイトのベストプラクティス

センサーにアクセスして使用するためのベストプラクティス

バックグラウンドジョブのベストプラクティス

于 2013-12-23T08:45:53.493 に答える