Страница 1 из 1

Вопрос к Автору урока 94, и не только.

Добавлено: 29 мар 2013, 11:11
Dangreon
Дорогой наш автор(и уважаемые форумчане), разбираясь с сервисами наткнулся на неприятную вещь-
часть урока 94 ну никак не хотела работать как "надо", в чем дело: когда мы возвращаем константу
START_STICKY, и убиваем процесс с сервисом, сервис должен сам себя перезапускать. так и происходит.
НО! я обратил внимание ,если его "грохать" еще , то больше он не подымается, т.к. выходит ошибка.

а все дело в том, что на вход onStartCommand после "первого убийства" приходит Intent = null. и обращение к нему вызовет ошибку.

автор об этом умалчивает. также можно было бы сказать что после каждого убийства ActivityManager увеличивает время на восстановления данного сервисам(если прошел небольшой промежуток времени с момента последнего "гроха").

У меня сложилась следующая картина:
когда возвращаем START_STICKY в методе onStartCommand ,сервис будет перезапущен после его убийства,
и будут выполнены методы 1) onCreate 2) onStartCommand но уже на вход придет Intent = null , и если мы в этом
методе его используем, то ОБЯЗАНЫ проверять на null.

Мои представления верны? Если да, поправьте пожалуйста урок 94...

Код: Выделить всё

public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d(LOG_TAG, "Стартую ,ёу;");
        if(intent != null){
        Log.d(LOG_TAG, "MyService onStartCommand, name = " + intent.getStringExtra("name"));
        readFlags(flags);
        MyRun mr = new MyRun(startId);
        new Thread(mr).start();
        return START_STICKY;
        }
        else
        {
            Log.d(LOG_TAG, "Intent сцобако равен null!");
            Integer i = startId;
            if(i==3) stopSelf();
            //if(i == null)
            Log.d(LOG_TAG, "startId = " + String.valueOf(startId));
            return super.onStartCommand(intent, flags, startId);
        }
    }

Re: Вопрос к Автору урока 94, и не только.

Добавлено: 29 мар 2013, 17:32
damager82
В разных версиях Android код по разному срабатывает этот механизм. Вы в какой версии тестили?
Я урок создавал и тестировал в 2.3.3. Там onStartCommand вообще не вызывается после восстановления.

Re: Вопрос к Автору урока 94, и не только.

Добавлено: 29 мар 2013, 17:46
Dangreon
damager82 писал(а):В разных версиях Android код по разному срабатывает этот механизм. Вы в какой версии тестили?
Я урок создавал и тестировал в 2.3.3. Там onStartCommand вообще не вызывается после восстановления.
Тогда понятно. Почему ж так..
Я тестил на версии 4.0.3 IceCream Sandwich. Может я что то не так делаю?)

Re: Вопрос к Автору урока 94, и не только.

Добавлено: 31 мар 2013, 01:10
Dangreon
Да, я проверил..Действительно данная особенность проявляется в версиях андроида >= 4.0. Для 2.3.3. метод onStartCommand после восстановления не срабатывает.