В моем приложении для Android у меня есть служба, которая должна быть перезапущена автоматически после того, как она будет убита.Я обнаружил, что это можно сделать с помощью START_STICKY
.
Но, очевидно, когда служба автоматически перезапускается, цель - null
.Проблема, однако, заключается в том, что намерение используется для передачи значения.См. Пример ниже:
public class MyService extends Service {
public static final String MY_STRING_HANDLE = "MyString";
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
// Read my string from intent
Bundle extras = intent.getExtras(); // ERROR: Intent can be null
if (extras == null) {
throw new Error("Intent did not contain my string");
}
String myString = extras.getString(MY_STRING_HANDLE);
if (myString == null || myString.isEmpty()) {
throw new Error("Intent did not contain my string");
}
// Do something with my string
doSomeThing(myString);
return START_STICKY;
}
}
Поэтому обычно я запускаю службу следующим образом:
Intent intent = new Intent(activity, MyService.class);
intent.putExtra(MyService.MY_STRING_HANDLE, "Example string");
activity.startService(intent);
Это работает, но когда служба убивается и автоматически перезапускается, я получаю следующий результат:
java.lang.NullPointerException: Попытка вызвать виртуальный метод 'android.os.Bundle android.content.Intent.getExtras ()' для ссылки на пустой объект
Итак, мой вопрос: если я не могу использовать намерения, то как мне передать значения (например, myString
) своему сервису?
Что касается возможного дубликата:Мой вопрос не о том, почему намерение null
, а о том, как я могу справиться с этим.