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

Why Android app crash when close app if I getExtras in 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);
}

然后我杀掉app,app会崩溃,服务也会崩溃

如果我把这行去掉就没问题了,我杀了应用后服务还活着

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

为什么应用会崩溃?

你把额外的东西放在错误的意图上bleService.putExtra("mac", "mac");

你应该写 serv.putExtra("mac", "mac");

另外你应该经常检查是否有额外的东西

if(getIntent().hasExtra("mac"){
   //do some stuff
}

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

"if this service's process is killed while it is started (after returning from onStartCommand(Intent, int, int)), then leave it in the started state but don't retain this delivered intent."

由于 Intent 没有被重新传送,您在调用 intent.getExtras().

时可能会得到 NPE

要从 onStartCommand() 重新传送 Intent return START_REDELIVER_INTENT 标志:

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