Mapbox 崩溃 Android 8(奥利奥)
Mapbox crash Android 8 (Oreo)
我一直在使用 Mapbox 4.2.2 版,因为我还没有准备好迁移到 Mapbox 5,因为版本 4 中的一些功能似乎不受支持。 (具体Camera Tracking)
我发现 Android 8 台设备出现崩溃。
Caused by java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.sctaylor.map/com.mapbox.mapboxsdk.telemetry.TelemetryService }: app is in background uid UidRecord{3534d78 u0a235 CEM idle procs:1 seq(0,0,0)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1512)
at android.app.ContextImpl.startService(ContextImpl.java:1468)
at android.content.ContextWrapper.startService(ContextWrapper.java:644)
at com.mapbox.mapboxsdk.telemetry.MapboxEventManager.setTelemetryEnabled(MapboxEventManager.java:252)
at com.mapbox.mapboxsdk.telemetry.MapboxEventManager.initialize(MapboxEventManager.java:146)
at com.mapbox.mapboxsdk.MapboxAccountManager.start(MapboxAccountManager.java:50)
at com.sctaylor.map.AnalyticsApplication.onCreate(AnalyticsApplication.java:44)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5821)
at android.app.ActivityThread.-wrap1(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1669)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6580)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这似乎是 Android 8 后台服务限制的问题(需要使用作业调度程序)。有没有办法在不升级到 Mapbox 5 的情况下解决这个问题?
It looks like this is an issue with Android 8's background service
restrictions (Need to use a job scheduler). Is there a way to fix this
without upgrading to Mapbox 5?
您对问题的原因完全正确。
问题已报告 here on GitHub, updates will be propagated here。
完整的修复是让 Mapbox 实现 JobScheduler。但是,他们还没有发布修复程序,我不知道他们是否会修复版本 4.x
作为现代修复,他们刚刚捕获了 IllegalStateException
而 Mapbox 似乎仍然有效。
在 MapboxAccountManager.start()
周围使用 try/catch 方法似乎不是一个好主意,因为 setTelemetryEnabled()
之后的代码将不会被执行。
我看到的唯一解决方法是将 targetSdkVersion 降级为 25。
我一直在使用 Mapbox 4.2.2 版,因为我还没有准备好迁移到 Mapbox 5,因为版本 4 中的一些功能似乎不受支持。 (具体Camera Tracking)
我发现 Android 8 台设备出现崩溃。
Caused by java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.sctaylor.map/com.mapbox.mapboxsdk.telemetry.TelemetryService }: app is in background uid UidRecord{3534d78 u0a235 CEM idle procs:1 seq(0,0,0)}
at android.app.ContextImpl.startServiceCommon(ContextImpl.java:1512)
at android.app.ContextImpl.startService(ContextImpl.java:1468)
at android.content.ContextWrapper.startService(ContextWrapper.java:644)
at com.mapbox.mapboxsdk.telemetry.MapboxEventManager.setTelemetryEnabled(MapboxEventManager.java:252)
at com.mapbox.mapboxsdk.telemetry.MapboxEventManager.initialize(MapboxEventManager.java:146)
at com.mapbox.mapboxsdk.MapboxAccountManager.start(MapboxAccountManager.java:50)
at com.sctaylor.map.AnalyticsApplication.onCreate(AnalyticsApplication.java:44)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5821)
at android.app.ActivityThread.-wrap1(Unknown Source)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1669)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:251)
at android.app.ActivityThread.main(ActivityThread.java:6580)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这似乎是 Android 8 后台服务限制的问题(需要使用作业调度程序)。有没有办法在不升级到 Mapbox 5 的情况下解决这个问题?
It looks like this is an issue with Android 8's background service restrictions (Need to use a job scheduler). Is there a way to fix this without upgrading to Mapbox 5?
您对问题的原因完全正确。
问题已报告 here on GitHub, updates will be propagated here。
完整的修复是让 Mapbox 实现 JobScheduler。但是,他们还没有发布修复程序,我不知道他们是否会修复版本 4.x
作为现代修复,他们刚刚捕获了 IllegalStateException
而 Mapbox 似乎仍然有效。
在 MapboxAccountManager.start()
周围使用 try/catch 方法似乎不是一个好主意,因为 setTelemetryEnabled()
之后的代码将不会被执行。
我看到的唯一解决方法是将 targetSdkVersion 降级为 25。