Java 如何使用START\u STICKY将额外值传递给服务?
在我的Android应用程序中,我有一个服务,它应该在被终止后自动重启。我发现这可以通过Java 如何使用START\u STICKY将额外值传递给服务?,java,android,android-intent,Java,Android,Android Intent,在我的Android应用程序中,我有一个服务,它应该在被终止后自动重启。我发现这可以通过START\u STICKY实现 但显然,当服务自动重启时,意图是null。然而,问题是意图被用来传递一个值。请参见下面的示例: public class MyService extends Service { public static final String MY_STRING_HANDLE = "MyString"; @Override public int onStartC
START\u 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
)传递给我的服务
关于可能的重复:我的问题不是为什么意图是空的,而是我如何处理这个问题。使用
START\u REDELIVER\u intent
而不是START\u STICKY
。另外,请确保对于您完全处理的每个Intent
,使用对onStartCommand()
的相应调用中提供的ID值调用stopSelf()
然后,如果Android终止您的进程(例如,内存不足),Android将重新启动您的服务,并向您提供您未指明(通过stopSelf()
)处理的任何Intent
对象
或者,不要依赖
意图
附加功能。相反,请将您的数据存储在文件、数据库、SharedReferences
、服务器等中,并让您的服务从那里获取数据。可能重复的@ADM请参阅我问题下面的注释。是的,现在您将其放在下面。你已经在下面和上面的链接中找到了答案。又一次通过公共软件。。。