Неклейкий сервис запускается сам и вылетает - PullRequest
0 голосов
/ 15 ноября 2018

Мой код класса обслуживания: я использую android.app.Service

public class ServiceClass extends Service {

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.i(TAG, "onStartCommand: ");
         // some work
       stopService(intent);
        return Service.START_NOT_STICKY;

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        Log.i(TAG, "onBind: ");
        return null;
    }

    @Override
    public void onDestroy() {

        Log.i(TAG, "onDestroy: ");
        super.onDestroy();

    }
}

Я запускаю его с помощью:

startService(new Intent(MainActivity.this,ServiceClass.class));

Когда я запускаю его, он выполняется один раз правильно.Но затем он пытается начать снова и вылетает со следующей ошибкой.

 ANR in com.sample.service
    PID: 7381
    Reason: executing service com.sample.service/.ServiceClass
    Load: 0.93 / 0.73 / 0.82
    CPU usage from 59831ms to 0ms ago (2018-11-15 13:26:46.668 to 2018-11-15 13:27:46.500):
      13% 1810/system_server: 8.7% user + 4.5% kernel / faults: 12123 minor

stopSelf(); выдает ту же ошибку.У меня нет ожидающих намерений нет широковещательных приемников, услуга зарегистрирована в манифесте.рабочая часть представляет собой циклический отсчет от 1 до 100 с текущим спящим потоком Thread.sleep(100);.Пожалуйста, не рекомендуйте альтернативы, у меня есть менеджер по работе, выполняющий ту же самую работу, и я просто хотел изучить Услуги.

1 Ответ

0 голосов
/ 15 ноября 2018

Вы получаете ANR, так как onStartCommand находится в потоке пользовательского интерфейса.Просто используйте IntentService или JobIntentService (если вам не нужно точное время запуска и вы хотите, чтобы он работал на Oreo с новыми ограничениями) для такого рода работ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...