2016-02-03 31 views
1

在升级到最新版本的Parse Android SDK后,我的一些用户遇到了应用程序显示黑屏并最终显示ANR并退出的问题。我能得到的ANR traces.txt,发现这样的:在LauncherActivity解析Android SDK ParseUser.getCurrentUser()ANR

ParseUser user = ParseUser.getCurrentUser();

"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) 

这发生在通话结束后。

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

任何想法??

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

+0

FWIW - 跟踪的是,bolts.Task.waitForCompletion阻止其在主线程....所以 - > ANR ...你的猴子与客户端和服务器端的会话状态和任何的周围排列进场调和上述“getCurrentUser()”的范围,即尝试可能重现错误差异连击? –

+0

不幸的是,我还没有能够在这些设备上进行调试。大概是因为ANR,调试过程不会被附加。 –

回答

0

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