0

私のプログラムで、新しいバージョンを確認したい (からデータを取得するHTTP)。
この関数は完全に機能しますが、X ごと (構成可能、1 時間、1 日など) にバックグラウンドで実行したいと考えています。

だから私はこのコードを書いた:

    Timer mTimer1 = new Timer();
    PowerManager pm = (PowerManager) this.main.getSystemService(Context.POWER_SERVICE);
    PowerManager.WakeLock wl = this.pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, MainActivity.PROGRAM);
    PowerManager.WakeLock wl.acquire();
    TimerTask mTt1 = new TimerTask()
    {
      public void run()
      {
        mTimerHandler.post(new Runnable()
          {
            public void run()
            {
// Do the check...
            }
          });
      }
    };

(この関数は から派生していない別のクラスにあるため、 を呼び出すことができるようにActivity、コンストラクターに親クラスを渡しました。これは として宣言されています)。 さて、新しいバージョンのチェックを開始すると、1 時間後 (つまり私の設定) にチェックインすると、スレッドが実行されていないことがわかります...this.maingetSystemServiceVariableprivate MainActivity main
TimerLogs

インターネットで検索したところ、 を使用する必要があることがわかりましPARTIAL_WAKE_LOCKた。

なぜ私はこの問題を抱えているのですか?

どうもありがとう!ルカ・ベルトンチェロ

4

4 に答える 4

0

電話がスリープ状態になると、アクティビティの実行が一時停止されるため、タイマーが起動することはありません。PARTIAL_WAKE_LOCK携帯電話がスリープしている間ずっとバッテリーを消費するため、使用はおそらく良い考えではありません.

AlarmManagerを見て、特にsetInexactRepeatingをお勧めします

于 2013-04-23T19:04:26.573 に答える
0

これは、ハンドラーとpostDelayed()を使用してこれに役立つSOの回答です。

ただし、アプリが開いていないときでもこれを実行したい場合は、AlarmMangerを使用する必要がPendingIntentありCalendarます。これにより、アプリにいないときでもチェックが行われます。asに登録することもできるので、デバイスの電源がオフになったときに再起動後に再び実行を開始します。setRepeating()AlarmMangermanifestBoot_Completed

これは、AlarmManager を使い始めるための良い例です

于 2013-04-23T19:00:10.450 に答える
0

タイマーを使用している場合、TimerTask をスケジュールすることを覚えていますか? 試す mTimer1.schedule(mTt1, delay, interval);

それを止めたい場合は、mTimer1.cancel(); とを実行しmTimer1.purge();て、スケジュール キューをクリアします。

于 2013-04-23T19:02:57.233 に答える
0

このコードを使用

 Timer timer = new Timer();
         timer.scheduleAtFixedRate( 
                    new java.util.TimerTask() {
                        @Override
                        public void run() {
                              // Your code
                   }},
                1000, 5000
                );

1000は post delay です。初めての遅延が必要な場合は、 0を入れたくない場合

5000は反復時間です

于 2013-04-23T19:03:24.690 に答える