2010-11-29 11 views
1

バックエンドの電話センサー(例:WiFi、加速度センサー)を定期的に読み取るタスクがあります。定期的センサー読み取りのためのAndroid AlarmManager

私の現在の解決策は、AlarmManagerを使用することです。

具体的には、我々は持っている: "オートログイン" プログラム(サービス)、私たちは応えて

 
public class Main extends Activity { 
... 
Intent intent = new Intent(this, AutoLogging.class); 
mAlarmSender = PendingIntent.getService(this, 0, intent, 0); 
am = (AlarmManager)getSystemService(ALARM_SERVICE); 
am.setRepeating(AlarmManager.RTC, 0, 5*1000, mAlarmSender); 
} 

: "メイン" プログラム(活動)、我々はPendingIntent.getService使用で

定期的にアラームに:

 
public class AutoLogging extends Service { 
... 
@Override 
public void onCreate() { 
    Toast.makeText(this, "onCreate", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
    Toast.makeText(this, "onDestroy", Toast.LENGTH_SHORT).show(); 
} 

@Override 
public boolean onUnbind(Intent intent) { 
    Toast.makeText(this, "onUnbind", Toast.LENGTH_SHORT).show() 
    return super.onUnbind(intent); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 
    Toast.makeText(this, "onStart", Toast.LENGTH_SHORT).show(); 
    // Read sensor data here 
} 

@Override 
    public IBinder onBind(Intent intent) { 
    Toast.makeText(this, "onBind", Toast.LENGTH_SHORT).show(); 
    return null; 
} 
} 

私の問題は、次のとおりです。

私が使用している場合このアラームサービスは、各アラームでOnCreateとOnStartだけが呼び出されます。

私の質問は以下のとおりです。

(1)私たちはOnDestroy(または[OnBind]の、onUnbind)を呼び出す必要がありますか?

(2)これはAlarmManagerを使用する正しい方法ですか(「ブロードケース受信機」と比較して)?

ありがとうございます! Vincent

答えて

0

AlarmManagerは保留中のインテントを使用して、インテントアクションを実行します。つまり、ケースでサービスを開始します。アラーム終了サービスはonCreate(まだ実行されていない場合)を使用して作成され、センサーデータの読み込みが終わったらstopSelf()を使ってサービスを停止することができます。これは最終的にonDestroy()を呼び出すため、サービス内でonDindroy()、onBind()またはonUnBind()を明示的に呼び出すべきではありません。

アラームマネージャーで放送受信機を使用する場合は、受信機のonReceiveでこのサービスを開始する必要があります。この場合、サービスを使用することは私にとっては適切と思われます。

+0

センサーデータの読み取りが終了した後、 "onStart"で "stopSelf"を呼び出す必要がありますか? – user523597

+0

そして、btw、私の現在のPendingIntent.getServiceと "broadcast receiver"の違いは何ですか?どうもありがとう! – user523597

+0

放送受信機の受信は、より長い時間を要する操作を行うべきではありません。センサーデータの読み取りに時間がかかる場合は、その操作を行うためにサービスを使用する必要があります。 http://stackoverflow.com/questions/3117350/alarmmanager-and-broadcastreceiver-instead-of-service-is-that-bad-timeout-prをご覧ください。 –

関連する問題