在 ActivityStarter.isAllowedToStart 中调用 inPinnedWindowingMode 时出现 NullPointerException

问题描述 投票:0回答:0

我正在调查几天前开始出现在某些小米和 OnePlus 设备上的 Android 应用程序崩溃。它只发生在少数用户中(< 10) at the moment, but it bothers me that I can't figure out what is going on.

崩溃是由在应用程序中调用 startActivity(...) 触发的,但实际异常是由 ActivityStarter 内部的系统进程抛出的:

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'boolean com.android.server.wm.ConfigurationContainer.inPinnedWindowingMode()' on a null object reference
at com.android.server.wm.ActivityStarter.isAllowedToStart(ActivityStarter.java:2068)
at com.android.server.wm.ActivityStarter.startActivityInner(ActivityStarter.java:1874)      
at com.android.server.wm.ActivityStarter.startActivityUnchecked(ActivityStarter.java:1678)
at com.android.server.wm.ActivityStarter.executeRequest(ActivityStarter.java:1231)
at com.android.server.wm.ActivityStarter.execute(ActivityStarter.java:717)

有两件事让我困惑:

  • 调用堆栈显示对 inPinnedWindowingMode 的调用发生在 ActivityStarter.java:2068 上。但是,我在第 2068 行发生调用的 Google 存储库中找不到 ActivityStarter.java 的任何修订版。
  • ActivityStarter 中唯一调用 inPinnedWindowingMode 的地方也在同一对象上调用了 isUidPresent,但这不会导致 NPE:
boolean blockBalInTask = (newTask
        || !targetTask.isUidPresent(mCallingUid)
        || (LAUNCH_SINGLE_INSTANCE == mLaunchMode && targetTask.inPinnedWindowingMode()));

https://cs.android.com/android/platform/superproject/+/master:frameworks/base/services/core/java/com/android/server/wm/ActivityStarter.java;drc=11b75eba3af4c5a46304dc51be66884a26d44cea;l= 1785

什么可以解释这种行为?

无法重现该问题,并且只发生在少数用户身上。

android android-source
© www.soinside.com 2019 - 2024. All rights reserved.