3

定期的なタスクを実行する正しい方法は何ですか? 私の実装は正しく動作していないようです: 画面がオンで電話を使用している場合、サービス メソッドは時間内に完全に実行されます。ただし、電話がロックされている場合、サービスは非常に大きなランダムな間隔で実行されます (例: 10:30 10:32 10:45 10:46 10:49 11:00...) コードは次のとおりです。

主なサービス クラス:

@Override
public void onCreate() {
    pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
    mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    // Display a notification about us starting.  We put an icon in the status bar.
    showNotification();
    mHandler.postDelayed(periodicTask, ONE_MINUTE); 
}

private Handler mHandler = new Handler();
private static final int ONE_MINUTE = 60000;

private Runnable periodicTask = new Runnable() {

    public void run() {
        try{
            wakelock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "My Tag");    
            wakelock.acquire();
            Log.v("PeriodicTimerService","Awake");
            getValues();
            writeDB();
            writeLog();
            mHandler.postDelayed(periodicTask, ONE_MINUTE);
        }
        finally{
            wakelock.release();
        }
    }
};
4

1 に答える 1

0

電話がスリープ状態であっても、定期的なタスクを毎分正確に実行する必要がある場合は、選択の余地がありません。AlarmManager を使用する必要があります。

于 2012-05-07T14:54:48.003 に答える