处理onHandleIntent期间Intent为null时的处理情况

时间:2018-03-21 09:16:22

标签: android

我有以下IntentService

public class NotificationIntentService extends IntentService {
    public NotificationIntentService() {
        super("NotificationIntentService");
    }

    @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        boolean retainStockPriceAlert = intent.getBooleanExtra(RETAIN_STOCK_PRICE_ALERT, true);
        ...
    }
}

我使用以下代码启动IntentService

Intent intent = new Intent(this, NotificationIntentService.class);
intent.putExtra(NotificationIntentService.RETAIN_STOCK_PRICE_ALERT, retainStockPriceAlert);
startService(intent);

然而,令我惊讶的是,有些用户在Intent期间获得了空onHandleIntent。因此,NPE发生了。

来自文档https://developer.android.com/reference/android/app/IntentService.html#onHandleIntent(android.content.Intent)

  

Intent:传递给startService(Intent)的值。如果,这可能为null   该服务在其流程消失后重新启动;看到   onStartCommand(Intent,int,int)了解详细信息。

我不太明白restarted after its process has gone away是什么意思。

我可以通过

轻松避免NPE
@Override
protected void onHandleIntent(@Nullable Intent intent) {
    if (intent == null) {
        return;
    }

    boolean retainStockPriceAlert = intent.getBooleanExtra(RETAIN_STOCK_PRICE_ALERT, true);
    ...
}

但是,我不确定这是否是正确的事情。

1 个答案:

答案 0 :(得分:0)

我可以使用

来避免NPE
setIntentRedelivery(true);
IntentService构造函数

中的

此答案由@Kunu的参考链接提供 - https://stackoverflow.com/a/37973523/72437