Вопрос к Автору урока 94, и не только.
Добавлено: 29 мар 2013, 11:11
Дорогой наш автор(и уважаемые форумчане), разбираясь с сервисами наткнулся на неприятную вещь-
часть урока 94 ну никак не хотела работать как "надо", в чем дело: когда мы возвращаем константу
START_STICKY, и убиваем процесс с сервисом, сервис должен сам себя перезапускать. так и происходит.
НО! я обратил внимание ,если его "грохать" еще , то больше он не подымается, т.к. выходит ошибка.
а все дело в том, что на вход onStartCommand после "первого убийства" приходит Intent = null. и обращение к нему вызовет ошибку.
автор об этом умалчивает. также можно было бы сказать что после каждого убийства ActivityManager увеличивает время на восстановления данного сервисам(если прошел небольшой промежуток времени с момента последнего "гроха").
У меня сложилась следующая картина:
когда возвращаем START_STICKY в методе onStartCommand ,сервис будет перезапущен после его убийства,
и будут выполнены методы 1) onCreate 2) onStartCommand но уже на вход придет Intent = null , и если мы в этом
методе его используем, то ОБЯЗАНЫ проверять на null.
Мои представления верны? Если да, поправьте пожалуйста урок 94...
часть урока 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);
}
}