java.lang.IllegalStateException: beginBroadcast() called while already in a broadcast

        問題log如下:

<span style="font-size:14px;">07-26 17:27:48.620 W/System.err( 1784): java.lang.reflect.InvocationTargetException
07-26 17:27:48.620 W/System.err( 1784): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-26 17:27:48.620 W/System.err( 1784): 	at java.lang.reflect.Method.invoke(Method.java:525)
07-26 17:27:48.620 W/System.err( 1784): 	at com.qinggan.carsignal.service.CarSignalService.allObserversInvoke(CarSignalService.java:1059)
07-26 17:27:48.620 W/System.err( 1784): 	at com.qinggan.carsignal.service.CarSignalService.OnACCStateChanged(CarSignalService.java:1113)
07-26 17:27:48.620 W/System.err( 1784): 	at com.qinggan.carsignal.service.CarSignalService.access$1300(CarSignalService.java:63)
07-26 17:27:48.620 W/System.err( 1784): 	at com.qinggan.carsignal.service.CarSignalService$4.handleMessage(CarSignalService.java:1269)
07-26 17:27:48.620 W/System.err( 1784): 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-26 17:27:48.620 W/System.err( 1784): 	at android.os.Looper.loop(Looper.java:137)
07-26 17:27:48.620 W/System.err( 1784): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
07-26 17:27:48.620 W/System.err( 1784): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-26 17:27:48.620 W/System.err( 1784): 	at java.lang.reflect.Method.invoke(Method.java:525)
07-26 17:27:48.620 W/System.err( 1784): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
07-26 17:27:48.620 W/System.err( 1784): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-26 17:27:48.620 W/System.err( 1784): 	at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:134)
07-26 17:27:48.620 D/dalvikvm( 1599): GC_CONCURRENT freed 399K, 23% free 3015K/3868K, paused 2ms+2ms, total 23ms
07-26 17:27:48.620 W/System.err( 1784): 	at dalvik.system.NativeStart.main(Native Method)
07-26 17:27:48.620 W/System.err( 1784): Caused by: java.lang.IllegalStateException: beginBroadcast() called while already in a broadcast
07-26 17:27:48.620 W/System.err( 1784): 	at android.os.Parcel.readException(Parcel.java:1439)
07-26 17:27:48.620 W/System.err( 1784): 	at android.os.Parcel.readException(Parcel.java:1385)
07-26 17:27:48.620 W/System.err( 1784): 	at com.qinggan.carsignal.ICarSignalServiceCallBack$Stub$Proxy.onACCStateChanged(ICarSignalServiceCallBack.java:311)</span>
【問題原因】:利用Binder機制跨進程進行接口調用,實現接口的遠程service採用註冊-分發的方式通知所有註冊的process。在所有註冊的process中,有一個process將接口阻塞,導致後續Process只要調用該接口,就會產生該問題。

【解決辦法】:採用多線程方式,將接口的阻塞式調用改未非阻塞式,避免影像其它process的調用。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章