【问题标题】:Worklight push leads to ConcurrentModificationExceptionWorklight 推送导致 ConcurrentModificationException
【发布时间】:2014-12-12 11:17:58
【问题描述】:

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

场景

  1. 应用程序被杀死
  2. 从 WL 服务器发送推送
  3. 在客户端。我们可以观察通知
  4. 点击通知启动应用程序后。它崩溃并显示以下错误日志。

日志如下。

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

【问题讨论】:

    标签: android ibm-mobilefirst push


    【解决方案1】:

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

    1. dispatchPendings();
    2. onMessage();

    在我的应用程序中,这两个方法同时被两个线程调用。所以资源被两个线程同时更新,导致了这种情况。

    【讨论】:

    • 也许吧。你能用你写的触发这个的原因生成一个示例应用程序吗?开发团队将尝试对其进行调试。
    • 好吧。该项目相当复杂,抽象一个演示并不容易。我将两个线程的两个stacktrace打印出来,看看我能做什么。
    猜你喜欢
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多