android - 如果我在服务中获得额外服务,为什么 Android 应用程序在关闭应用程序时会崩溃?

标签 android android-intent android-service

Activity中我启动了一个服务

Intent serv=new Intent(this, MyService.class);
serv.putExtra("mac", "mac");
startService(serv);

在服务中,我获取参数

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    String mac=intent.getExtras().getString("mac");
    return super.onStartCommand(intent, flags, startId);
}

然后我杀了这个应用,应用会崩溃,服务也会崩溃。

如果我删除这一行,那么就没问题了,我杀了应用后服务还活着。

String mac=intent.getExtras().getString("mac");

为什么应用会崩溃?

最佳答案

super.onStartCommand(intent, flags, startId) 返回 START_STICKY默认情况下标记,根据文档,这意味着:

“如果此服务的进程在启动时被终止(在从 onStartCommand(Intent, int, int) 返回后),则将其保留在启动状态但不保留此传递的 Intent 。”

由于 Intent 没有被重新传送,您在调用 intent.getExtras() 时可能会得到 NPE

要重新传递 Intent,请返回 START_REDELIVER_INTENT来自 onStartCommand() 的标志:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    ...
    return START_REDELIVER_INTENT;
}

关于android - 如果我在服务中获得额外服务,为什么 Android 应用程序在关闭应用程序时会崩溃?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40033702/

相关文章:

Android 使用广播检查互联网连接

android - 如何使用 CameraX 设置正确的纵横比?

android - 使用 Intent 将数据从 Activity 传递到 Service

android - 使用 Intent.ACTION_PICK 打开图像

java - 在服务 Android 1.5 中使用唤醒锁

java - 如何获取最新的文件添加到Android手机

android - 将位图动态放入小部件时失败的 Binder 事务

android - 使用 Chrome/默认 Internet 浏览器启动 Servie/Activity

android - 在 string.xml 中定义时服务操作不起作用

java - 如何设置来自应用程序的每天一次通知