【问题标题】:Samsung Note 3 version 4.4.4 null pointer in ViewRootImpl.setMultiWindowScaleViewRootImpl.setMultiWindowScale 中的三星 Note 3 版本 4.4.4 空指针
【发布时间】:2014-09-30 18:20:34
【问题描述】:

我收到了三星 Note 3 和 Android 4.4.4 用户的报告。它在这里转储:

SM-N900P 4.4.4 19

java.lang.NullPointerException
    at android.view.ViewRootImpl.setMultiWindowScale(ViewRootImpl.java:7992)
    at android.view.WindowManagerGlobal.setMultiWindowScale(WindowManagerGlobal.java:538)
    at com.android.internal.policy.impl.MultiPhoneWindow.adjustScaleFactor(MultiPhoneWindow.java:1602)
    at com.android.internal.policy.impl.MultiPhoneWindow.access$2300(MultiPhoneWindow.java:107)
    at com.android.internal.policy.impl.MultiPhoneWindow$MultiPhoneDecorView.onAttachedToWindow(MultiPhoneWindow.java:1120)
    at android.view.View.dispatchAttachedToWindow(View.java:13637)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2703)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1533)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1270)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6686)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:813)
    at android.view.Choreographer.doCallbacks(Choreographer.java:613)
    at android.view.Choreographer.doFrame(Choreographer.java:583)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:799)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:146)
    at android.app.ActivityThread.main(ActivityThread.java:5727)
    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:1291)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1107)
    at dalvik.system.NativeStart.main(Native Method)

它不在我的代码中,我无法在模拟器中重现它,因为我无法使用 4.4.4 创建 AVD。 使用 AVD 4.4.2 它可以工作。我已经在商店/商店试用了 4.4.2 版的实体手机,它可以工作。但是,我无法获得 4.4.4 版本。

  1. 如何使用 4.4.4 创建和 AVD?
  2. 为什么 Google 不提供 4.4.4 AVD?
  3. 有人知道如何解决转储问题吗?
  4. 我什至在 AOSP 中都找不到第 7992 行和 setMultiWindowScale 方法?

谢谢!

【问题讨论】:

  • AOSP 中没有 setMultiWindowScale(),AVD 在这里也无济于事,因为它是三星定制版 Android 的一部分。因此,了解问题的唯一方法是查看三星的专有源代码。
  • 我也有这个问题。它只发生在 Note 3 (SM N900P) 的 Sprint 版本上。
  • @theJosh 您是否有意为您的应用程序添加多窗口支持?如果是这样,请交叉检查您的实施here。你能在模拟器上重现这个问题吗?
  • @mass 我正在使用多窗口支持。我已经购买了 Sprint Note 3,我能够重现问题,但仍然无法找到确切的原因。
  • @powder366 您在应用中使用广告吗?我使用 Mopub。但是,我的应用程序的付费版本是免费的,没有这个问题。

标签: android android-sdk-tools samsung-mobile-sdk


【解决方案1】:

如何使用 4.4.4 创建和 AVD?

Genymotion 可让您模拟在 4.4.4 上运行的三星 Note 3。

它具有对 Eclipse 和 Android Studio 的插件支持,请按照说明here 进行安装。

为什么 Google 不提供 4.4.4 AVD?

我不知道为什么不是 AVD,但他们提供 4.4.4 here 的二进制文件,如果您可以访问 Nexus 设备,您可能需要仔细检查/确认问题仅与三星有关。

有人知道如何解决转储问题吗?

上面发布的堆栈跟踪看起来像是在您的应用程序附加到多窗口并且视图被缩放之后引发了异常,或者至少如果没有引发该 NPE,它将被缩放。使用此step by step guide 检查您的清单设置以获取多窗口支持,检查最大和最小窗口大小。如果模拟器不起作用并且您无法重现异常,作为最后的手段,以某种方式联系该用户并进行沟通以重现问题/测试您的解决方案并迭代直到其修复。祝你好运!

我什至找不到第 7992 行和 setMultiWindowScale 方法 AOSP?

由于这看起来与支持多窗口和其他三星东西的 android.view.ViewRootImpl 类的三星特定实现非常相关,我怀疑除非三星已在某处发布它,否则您能否找到实际源代码。

【讨论】:

  • 模拟器上没有出现这个问题。我现在有 2 个 note 3 设备进行测试。在 Verizon 设备上一切正常,但在 Sprint 设备上始终崩溃。 Crashlytics 的报告显示了相同的结果。
  • 我不太确定 Sprint 和 Verizon 之间的区别,是仅在硬件上还是软件上?您是否有机会调试传递给 setMultiWindowScale 方法的参数?例如比例因子或分辨率。恐怕这两款手机对该类有不同的实现,这可能是根本原因。在这种情况下,您可能应该考虑禁用该特定设备的多窗口支持,直到制造商修复该错误。
猜你喜欢
  • 1970-01-01
  • 2013-12-26
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
相关资源
最近更新 更多