Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用START\u STICKY将额外值传递给服务?_Java_Android_Android Intent - Fatal编程技术网

Java 如何使用START\u STICKY将额外值传递给服务?

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

在我的Android应用程序中,我有一个服务,它应该在被终止后自动重启。我发现这可以通过
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请参阅我问题下面的注释。是的,现在您将其放在下面。你已经在下面和上面的链接中找到了答案。又一次通过公共软件。。。