Worklight push导致ConcurrentModificationException

时间:2014-12-12 11:17:59

标签: android ibm-mobilefirst push

我们正在使用worklight 6.2来构建Android本机客户端。最近我们遇到一个异常会在收到推送通知时导致应用程序崩溃。我们已经按照官方教程来构建这个客户端。

方案

  1. 该应用被杀
  2. 从WL服务器发送推送
  3. 在客户端。我们可以观察通知
  4. 单击通知以启动应用程序。它崩溃了以下错误日志。
  5. 日志如下。

    12-12 10:43:41.995: E/AndroidRuntime(31144): java.lang.RuntimeException: Error receiving broadcast Intent { act=com.MeaWallet.MeaWallet.C2DM_REGISTERED flg=0x10 (has extras) } in com.worklight.wlclient.api.WLPush$3@2e2deef4
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:871)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at android.os.Handler.handleCallback(Handler.java:739)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at android.os.Handler.dispatchMessage(Handler.java:95)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at android.os.Looper.loop(Looper.java:135)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at android.app.ActivityThread.main(ActivityThread.java:5221)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at java.lang.reflect.Method.invoke(Native Method)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at java.lang.reflect.Method.invoke(Method.java:372)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
    12-12 10:43:41.995: E/AndroidRuntime(31144): Caused by: java.util.ConcurrentModificationException
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at java.util.ArrayList$ArrayListIterator.remove(ArrayList.java:586)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at com.worklight.wlclient.api.WLPush.dispatchPendings(WLPush.java:712)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at com.worklight.wlclient.api.WLPush.updateTokenCallback(WLPush.java:744)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at com.worklight.wlclient.api.WLPush.access$400(WLPush.java:113)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at com.worklight.wlclient.api.WLPush$3.onReceive(WLPush.java:538)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:861)
    12-12 10:43:41.995: E/AndroidRuntime(31144):    ... 8 more
    

1 个答案:

答案 0 :(得分:0)

这是由于同步问题造成的。 WLPush.java中有一个名为“pendingPushEvents”的资源。两种方法可以更新。

  1. dispatchPendings();
  2. 的onMessage();
  3. 在我的应用程序中,这两个方法同时由两个线程调用。因此,资源同时由两个线程更新,这导致了这种情况。