1

很少有手机会进入我的 Intent 服务无法从广播接收器获得 startService 命令的状态(称为“有趣状态”)的问题。(是的,清单定义了接收器和服务)。

在此示例中,我正在侦听推送通知,然后调用 CheckinService。接收者:

public class PushReceiver extends BroadcastReceiver {

private static final String LOG_TAG = "push_receiver";

@Override
public void onReceive(Context context, Intent intent) {
    logger.putExtra("debug", "Received Push");

    Intent serviceIntent = new Intent(context, CheckinService.class);
    context.startService(serviceIntent);

    logger.putExtra("debug", "Sent to Service");
}

服务:

public class CheckinService extends IntentService {
    private static final String LOG_TAG = "checkin_service";
    public static final int SERVICE_ID = 3;

    public CheckinService() {
        super(LOG_TAG);
        Log.i(LOG_TAG, "Service says: Checkin service started no constructor");
    }

    public CheckinService(String name) {
            super(LOG_TAG);
        Log.i(LOG_TAG, "Service says: Checkin service started with constructor");
    }

    @Override
    protected void onHandleIntent(Intent intent) {
         Log.i(LOG_TAG, "Auto Checkin started");
         .....tons of genius logic.....
        }
}

因此,当手机进入有趣状态时,“收到推送”会被记录,“发送到服务”会被记录,但服务的构造函数和 onHandleIntent 方法永远不会被调用。
我不仅在推送上发生这种情况,而且在 inexactRepeatingAlarm 和其他可能的接收器上也发生了这种情况,但这两个已经得到确认。

同样,这种情况非常非常罕见,并且似乎在手机闲置一段时间后发生;并且可能进入省电模式。

此外,终止应用程序的进程可以清除这一点。

4

1 回答 1

1

我意识到这里发生了什么。

IntentService 是单线程的。因此,如果我的“......大量天才逻辑......”中的某些内容被阻塞(如没有超时的 http 请求),则不会处理进入服务的下一个意图。

美好而谦卑。

于 2012-10-20T18:34:50.783 回答