可以快速连续多次启动意向服务会导致零附加吗?

sig*_*ger 7 android android-intent

我们看到一个问题,我们的一个intent服务意外地null为我们的一些用户检索了一个String extra.我们无法重现这一点,并且我们不知道受影响用户的设备上是否随机或一致.受影响的用户与设备类型或Android版本之间似乎没有相关性.

我正在扩展IntentService和实现这样的handleIntent方法:

@Override
public void handleIntent(Intent intent) {
    String action = intent.getAction();

    if (action.Equals(ACTION_MARK_UNREAD)) {
        String messageKey = intent.getStringExtra(EXTRA_MESSAGE_KEY);

        // messageKey is null for some users
    }
}
Run Code Online (Sandbox Code Playgroud)

有字段:

public static final String ACTION_MARK_UNREAD = "com.myapp.action.MARK_UNREAD";
public static final String EXTRA_MESSAGE_KEY = "extraMessageKey";
Run Code Online (Sandbox Code Playgroud)

在片段中,我们快速连续启动此服务6次:

    for (int i = 0; i < 6; i++) {
            Intent i = new Intent(MyIntentService.ACTION_MARK_UNREAD);
            i = i.setClass(mContext, MyIntentService.class);
            i.putExtra(MyIntentService.EXTRA_MESSAGE_KEY, i.toString());
            mContext.startService(i);
    }
Run Code Online (Sandbox Code Playgroud)

任何想法,为什么服务将获取nullmessageKey额外?

我们在应用程序中有其他区域启动此相同的服务,当发生这种情况时,我们无法确定它来自哪个区域.但是,通过查看日志,它似乎来自我提到的这个片段.日志显示发生的客户端时间戳null是上一次发生后的几秒钟.这可能是因为服务队列移动缓慢,或者我的假设可能是错误的.

小智 1

你会尝试吗?

for (int y = 0; y < 6; y++) {
        Intent i = new Intent(MyIntentService.ACTION_MARK_UNREAD);
        i = i.setClass(mContext, MyIntentService.class);
        i.putExtra(MyIntentService.EXTRA_MESSAGE_KEY, y.toString());
        mContext.startService(i);
}
Run Code Online (Sandbox Code Playgroud)

可能是编译器问题...