HanteIsHante / ServiceMessage

Service 相关属性
0 stars 0 forks source link

RemoteCallbackList.beginBroadcast() #4

Open HanteIsHante opened 7 years ago

HanteIsHante commented 7 years ago
 int i = mRemoteCallbackList.beginBroadcast();
        while(i > 0){
            i --;
            try {
                mRemoteCallbackList.getBroadcastItem(i).dosomthing();
            } catch(RemoteException e) {
                e.printStackTrace();
            }
        }
        mRemoteCallbackList.finishBroadcast();

准备开始调用当前注册的回调。这将创建一个回调列表的副本,你可以从使用getBroadcastItem检索条目,注意:一次只能激活一个广播,所以你必须确保总是从同一个线程调用这个或者是自己做同步。完成后必须调用finishBroadcast。

HanteIsHante commented 7 years ago
Fatal Exception: java.lang.RuntimeException: Unable to unbind to service net.netfits.android.sdk.NetfitsVpnService@2d050092 with Intent { act=android.net.VpnService cmp=cc.netpas.android_firewall/net.netfits.android.sdk.NetfitsVpnService }: java.lang.IllegalStateException: beginBroadcast() called while already in a broadcast
       at android.app.ActivityThread.handleUnbindService(ActivityThread.java:3220)
       at android.app.ActivityThread.access$2100(ActivityThread.java:187)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1683)
       at android.os.Handler.dispatchMessage(Handler.java:111)
       at android.os.Looper.loop(Looper.java:194)
       at android.app.ActivityThread.main(ActivityThread.java:5871)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1119)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:885)
Caused by java.lang.IllegalStateException: beginBroadcast() called while already in a broadcast
       at android.os.RemoteCallbackList.beginBroadcast(RemoteCallbackList.java:230)
       at net.netfits.android.sdk.NetfitsVpnService.onStateChanged(NetfitsVpnService.java:218)
       at net.netfits.android.sdk.NetfitsVpnService.stopVpnService(NetfitsVpnService.java:342)
       at net.netfits.android.sdk.NetfitsVpnService.onUnbind(NetfitsVpnService.java:158)
       at android.app.ActivityThread.handleUnbindService(ActivityThread.java:3207)
HanteIsHante commented 7 years ago

数据传输到 Service 端的时候,数据对象已经是重新构造出来的了,因此,如果有注册监听器、注销监听器之类的需求,则不应该使用普通的 List 来管理。应使用 RemoteCallbackList 来处理接口。