Mapbox崩溃Android 8(奥利奥)

时间:2018-02-22 00:39:44

标签: android mapbox mapbox-android

我一直在使用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?

1 个答案:

答案 0 :(得分:1)

  

看起来这是Android 8的后台服务的一个问题   限制(需要使用作业调度程序)。有没有办法来解决这个问题   没有升级到Mapbox 5?

你对这个问题的原因是完全正确的。

在GitHub上报告了此问题here,更新将传播here

干净的修复方法是Mapbox实现JobScheduler。但是,他们还没有发布修复程序,我也不知道他们是否会修复版本4.x

作为一个当代修复,他们只是抓住IllegalStateException,而Mapbox似乎仍然有效。

MapboxAccountManager.start()周围使用try / catch方法似乎并不是一个好主意,因为setTelemetryEnabled()之后的代码不会被执行。

我看到的唯一解决方法是将targetSdkVersion降级为25。