Оптимизация работы сервиса с постоянно выполняющейся TimerTask - PullRequest
1 голос
/ 15 сентября 2011

Мне нужен сервис, который всегда должен работать до тех пор, пока он не будет явно остановлен моей деятельностью, и должен запускаться снова, даже если он остановлен из-за какой-либо проблемы (флаг START_STICKY). Этот сервис должен постоянно что-то делать (каждые пару секунд), используя TimerTask. Я получил следующий код.

public class SomeService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    TimerTask timerTask;
    final Handler handler = new Handler();
    Timer timer = new Timer();

    @Override
    public void onCreate() {
        // code to execute when the service is first created
        super.onCreate();
    }

    @Override
    public void onDestroy() {
        // code to execute when the service is shutting down
        super.onDestroy();
    }

    @Override
    public void onStart(Intent intent, int startid) {
        // code to execute when the service is starting up
        timerTask = new TimerTask() {
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                                   //KEEP RUNNING SOME ERRANDS HERE
                        }
                    }
                });
            }
        };
        timer.scheduleAtFixedRate(timerTask, 100L, 1700L);
    }

}

Можно ли как-нибудь оптимизировать это для непрерывной работы?

1 Ответ

6 голосов
/ 16 сентября 2011

Запуск каждую секунду звучит довольно чрезмерно, но есть ли причина, по которой вы не используете AlarmManager для запуска IntentService? Тогда система будет отвечать за надежный запуск вашего сервиса. Можете ли вы добиться надежного 1-секундного повторного запуска, я не знаю. Похоже, плохая идея по причинам, которые Марк упоминает в другом ответе.

...