解析Android SDK ParseUser.getCurrentUser()ANR

时间:2016-02-03 21:52:07

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

升级到最新版本的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)

这是在致电:

之后发生的 LauncherActivity中的

ParseUser user = ParseUser.getCurrentUser();

仅在以前经过身份验证的用户以及应用关闭并重新启动后才会发生这种情况。如果他们有全新安装(或清除数据),则不会发生。对于OS版本和设备,它有很大的不同,但我每次都能使用运行4.4.2 KitKat的三星Galaxy S4 Mini(GT-I9190)和三星Galaxy S4(GT-I545)重现它。运行4.4.2 KitKat。我见过用户报告了各种制造商以及棒棒糖前和棒棒糖后的问题。

任何想法??

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

1 个答案:

答案 0 :(得分:0)

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