【问题标题】:Parse Android SDK ParseUser.getCurrentUser() ANR解析 Android SDK ParseUser.getCurrentUser() ANR
【发布时间】:2016-02-05 07:00:44
【问题描述】:

升级到最新版本的 Parse Android SDK 后,我的一些用户遇到了一个问题,即我们的应用显示黑屏,最终出现 ANR 并退出。我能够得到 anr traces.txt 并找到了这个:

"main" prio=5 tid=1 WAIT
  | group="main" sCount=1 dsCount=0 obj=0x41c1dea0 self=0x41c09768
  | sysTid=31669 nice=-11 sched=0/0 cgrp=apps handle=1074811220
  | state=S schedstat=( 0 0 0 ) utm=130 stm=12 core=1
  at java.lang.Object.wait(Native Method)
  - waiting on <0x427b26a8> (a java.lang.Object)
  at java.lang.Object.wait(Object.java:364)
  at bolts.Task.waitForCompletion(Task.java:132)
  at com.parse.ParseTaskUtils.wait(ParseTaskUtils.java:29)
  at com.parse.ParseUser.getCurrentUser(ParseUser.java:906)
  at com.parse.ParseUser.getCurrentUser(ParseUser.java:893)
  at com.ourapp.activities.LauncherActivity.onCreate(LauncherActivity.java:38)
  at android.app.Activity.performCreate(Activity.java:5458)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2376)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2470)
  at android.app.ActivityThread.access$900(ActivityThread.java:174)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1307)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:146)
  at android.app.ActivityThread.main(ActivityThread.java:5593)
  at java.lang.reflect.Method.invokeNative(Native Method)
  at java.lang.reflect.Method.invoke(Method.java:515)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
  at dalvik.system.NativeStart.main(Native Method)

这发生在调用:

ParseUser user = ParseUser.getCurrentUser(); 在 LauncherActivity 中。

这种情况仅发生在之前经过身份验证的用户以及应用程序关闭并重新启动之后。如果他们有全新安装(或清除数据),则不会发生。就操作系统版本和设备而言,它变化很大,但我每次都能使用运行 4.4.2 KitKat 的三星 Galaxy S4 Mini (GT-I9190) 和三星 Galaxy S4 (GT-I545) 重现它运行 4.4.2 KitKat。我已经看到用户从各种制造商以及棒棒糖前和棒棒糖后报告了这个问题。

有什么想法吗??

我已经在他们的 GitHub 上搜索了已知问题,甚至搜索了 Parse Discussion Google Group 都没有运气。 (此后我在该组中发布了同样的问题)

【问题讨论】:

  • fwiw - 跟踪是 bolts.Task.waitForCompletion 是阻塞的,并且它在主线程上......所以 -> anr......你可以用客户端和服务器的排列来解决问题吗?侧会话状态以及在“getCurrentUser()”范围内协调上述任何内容,即尝试可能重新创建错误的差异组合?
  • 不幸的是,我也无法在这些设备上进行调试。调试过程可能由于 ANR 而无法附加。

标签: android parse-platform android-anr-dialog


【解决方案1】:

发现问题。我们有一个自定义用户类扩展 ParseUser。我创建了一个名为“isCurrentUser()”的方法,它也是 ParseUser 中包方法的名称。相应地,Lint 没有发现问题,但是当 Parse 去检索当前用户时,它在该过程中调用 isCurrentUser() 并且我创建的自定义方法将意外值返回给 SDK,然后导致对象永久锁定在螺栓中。疯狂的。你不会认为 SDK 会调用我的方法,因为它来自一个扩展 ParseUser 的类,但它确实如此,因为正在保存的 User 对象属于同一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    相关资源
    最近更新 更多