バッテリー レベルが 10% に達したときにサーバーにメッセージを送信する BlackBerry アプリに取り組んでいます。これは、次getBatteryStatus()
のことを行うコンストラクターでメソッドを呼び出すことによって実装されます。getBatteryStatus()
public static void getBatteryStatus() {
timerBattery = new Timer();
taskBattery = new TimerTask() {
public void run() {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
if (DeviceInfo.getBatteryLevel()==10) {
try{
String freeText="Battery level at 10%";
sendBatteryStatus(freeText);
}catch(Exception e){}
}
}
});
}
};
timerBattery.scheduleAtFixedRate(taskBattery, 0, 20000);
}
はsendBatteryStatus
メッセージをサーバーに送信し、タイマーをキャンセルします。これにより、要求に応じてサーバーにメッセージが 1 回送信されたことになります。
しかし、ユーザーがアプリをそのまま (コンストラクターを再度呼び出すことなく) 実行している状態で携帯電話の充電を開始した場合はどうなるでしょうか。タイマーはどのように再起動しますか? 次回サーバーにメッセージを送信するにはどうすればよいですか?
バッテリ レベルが 10% の複数のメッセージを送信するのを防ぎ、実質的に一度だけメッセージを送信し、次にバッテリ レベルが 10% になったときにメッセージが再度送信されるようにするための最良のメカニズムは何ですか?
メッセージの送信後にタイマーをキャンセルしないと、サーバーへのメッセージが複数回送信されます。