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

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

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

Сообщение Dangreon » 29 мар 2013, 11:11

Дорогой наш автор(и уважаемые форумчане), разбираясь с сервисами наткнулся на неприятную вещь-
часть урока 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);
        }
    }

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

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

Сообщение damager82 » 29 мар 2013, 17:32

В разных версиях Android код по разному срабатывает этот механизм. Вы в какой версии тестили?
Я урок создавал и тестировал в 2.3.3. Там onStartCommand вообще не вызывается после восстановления.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

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

Сообщение Dangreon » 29 мар 2013, 17:46

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

Dangreon
Сообщения: 41
Зарегистрирован: 01 янв 2013, 15:52

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

Сообщение Dangreon » 31 мар 2013, 01:10

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

Ответить