0

私は、毎日 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ファイルに日付の最初の出現を保存します。

問題:デバイスの電源がオフになっている場合を除き、コードは正常に動作するため、スレッドはその間停止します。どうすればこの問題を克服できますか。

あらゆる種類の提案は大歓迎です。前もって感謝します。

4

2 に答える 2

1

アプリケーションを常時ではなく定期的に実行するには、AlarmManagerを使用します。コード内のように遅延を使用すると、サイクルが無駄になり、アプリケーションがメモリ管理のために Android OS 自体によって強制終了されるリスクがあります。

于 2013-02-09T07:01:30.573 に答える
1

以下のロジックに従ってみてください。参考になるかもしれない、ただの考えです。

あなたのアプリケーションは今日実行されます - つまり、myTodayDateなどのエントリーをファイルに入れます。これは、アプリケーション固有の日付です。

これに加えて、システムの現在の日付も入力します。これはlastUpdatedDateとして保存されます。

次の 2 日間、モバイルの電源がオフになっているとします。後でアプリケーションを実行するときに、これを行うことができます。

ファイルからlastUpdatedDateを取得し、現在のシステム日付から減算します。得られる違いはnoOfDays=2になります。

これを、ファイルにあるmyTodayDateに追加します。

ここで、前に述べたように、この新しい日付を現在のシステムと共に保存します。これは、日付同期の問題を解決するのに役立つ場合があります。

実際にはただの考えです!それが助けになったら、私に知らせてください。

于 2013-02-09T06:55:52.890 に答える