私は、毎日 1 回実行されるアプリケーションを開発しました。その中で、ファイル内の日付を 1 つずつ更新したい (そのため、毎日行う必要があります)。
私は次のような Handler の助けを借りてそれを可能にします:
final Runnable mUpdateResults = new Runnable() {
public void run() {
try{
FileInputStream fia = openFileInput("ActualDate");
StringBuffer actualContent = new StringBuffer("");
byte[] buffer = new byte[1024];
try {
while ((fia.read(buffer)) != -1) {
actualContent.append(new String(buffer));
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
actualDate = actualContent.toString().trim();
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
Calendar c = Calendar.getInstance();
try {
c.setTime(sdf.parse(actualDate));
} catch (Exception e) {
e.printStackTrace();
}
c.add(Calendar.DATE, 1);
actualDate = sdf.format(c.getTime());
FileOutputStream foa = openFileOutput("ActualDate", Context.MODE_PRIVATE);
foa.write(actualDate.getBytes());
foa.close();
}catch (Exception e) {
// TODO: handle exception
startupFunction();
}
}
};
long delay = 24*60*60*1000; // first run after a day
long period = 24*60*60*1000; // repeat every day.
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
mHandler.post(mUpdateResults);
}
}, delay, period);
この背後にある実際のアイデアは、ユーザーが変更できないアプリケーションのデバイスに依存しない日付が必要だということです。UTC 日付からActualDateファイルに日付の最初の出現を保存します。
問題:デバイスの電源がオフになっている場合を除き、コードは正常に動作するため、スレッドはその間停止します。どうすればこの問題を克服できますか。
あらゆる種類の提案は大歓迎です。前もって感謝します。