尝试调用虚拟方法';void com.android.server.am.TaskRecord.setIntent(com.android.server.am.ActivityRecord)和#x27;关于空对象引用

尝试调用虚拟方法';void com.android.server.am.TaskRecord.setIntent(com.android.server.am.ActivityRecord)和#x27;关于空对象引用,android,android-intent,android-activity,crash,Android,Android Intent,Android Activity,Crash,我们的Launcher系统应用程序很少在更新后立即崩溃(MY_PACKAGE\u被替换),而它正在启动此特定活动LoginScannePractivity,并使用其自己的PackageReplacedBroadcastReceiver接收器中的一些标志 事故报告: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.android.server.am.TaskRecord.setIntent(com

我们的Launcher系统应用程序很少在更新后立即崩溃(
MY_PACKAGE\u被替换
),而它正在启动此特定活动
LoginScannePractivity
,并使用其自己的
PackageReplacedBroadcastReceiver
接收器中的一些标志

事故报告:

java.lang.NullPointerException: Attempt to invoke virtual method 'void com.android.server.am.TaskRecord.setIntent(com.android.server.am.ActivityRecord)' on a null object reference
    at android.os.Parcel.readException(Parcel.java:1690)
    at android.os.Parcel.readException(Parcel.java:1637)
    at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:3238)
    at android.app.Instrumentation.execStartActivity(Instrumentation.java:1518)
    at android.app.ContextImpl.startActivity(ContextImpl.java:805)
    at android.app.ContextImpl.startActivity(ContextImpl.java:782)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:356)
    at android.content.ContextWrapper.startActivity(ContextWrapper.java:356)
    at io.workerbase.app.launcher.activity.user.LogoutHelper.logout(LogoutHelper.kt:54)
    at io.workerbase.app.launcher.activity.user.LogoutHelper.logoutLauncher(LogoutHelper.kt:41)
    at io.workerbase.app.launcher.activity.user.LogoutHelper.logoutLauncherAndDM(LogoutHelper.kt:28)
    at io.workerbase.app.launcher.receiver.PackageReplacedBroadcastReceiver.onReceive(PackageReplacedBroadcastReceiver.kt:23)
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3156)
    at android.app.ActivityThread.-wrap18(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1645)
    at android.os.Handler.dispatchMessage(Handler.java:110)
    at android.os.Looper.loop(Looper.java:203)
    at android.app.ActivityThread.main(ActivityThread.java:6337)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
java.lang.RuntimeException: Unable to start receiver io.workerbase.app.launcher.receiver.PackageReplacedBroadcastReceiver: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.android.server.am.TaskRecord.setIntent(com.android.server.am.ActivityRecord)' on a null object reference
    at android.app.ActivityThread.handleReceiver(ActivityThread.java:3163)
    at android.app.ActivityThread.-wrap18(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1645)
    at android.os.Handler.dispatchMessage(Handler.java:110)
    at android.os.Looper.loop(Looper.java:203)
    at android.app.ActivityThread.main(ActivityThread.java:6337)
    at java.lang.reflect.Method.invoke(Method.java)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1084)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:945)
崩溃只发生在安卓7.1.1(AOSP)上,从未发生在安卓6.0.1(AOSP)上。 我想知道这次崩溃的原因是什么,活动意图标志:

Intent(context, LoginScannerActivity::class.java).apply {
    addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
    addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
在使用应用程序时,哪个正常工作良好,在用户注销时导航到此活动,还是其他原因?我无法重现崩溃,也看不到代码中有任何错误

舱单:

<activity
    android:name="io.workerbase.app.launcher.activity.scan.LoginScannerActivity"
    android:clearTaskOnLaunch="true"
    android:screenOrientation="landscape"
    android:stateNotNeeded="true"
    android:theme="@style/WatchAppTheme"
    android:windowSoftInputMode="stateAlwaysHidden" />

<receiver android:name=".receiver.PackageReplacedBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
    </intent-filter>
</receiver>
登录帮助者:

object LogoutHelper {

    fun logoutLauncherAndDM(context: Context, configStore: ConfigurationStore, wifiUtil: WifiUtil) {
        Timber.d("logoutLauncherAndDM")

        logoutLauncher(context, configStore, wifiUtil)
        DeviceManagementManager.sendLogoutUserBroadcast(context)
    }

    fun logoutLauncher(context: Context, configStore: ConfigurationStore, wifiUtil: WifiUtil) {
        Timber.d("logoutLauncher")

        logout(context, configStore, wifiUtil)
        SkeeperClientService.stop(context)
    }

    private fun logout(context: Context, configStore: ConfigurationStore, wifiUtil: WifiUtil) {
        configStore.clearUserSession().also {
            Modules.reloadRepositoryModules()
        }

        if (wifiUtil.isTargetWifiConnected(configStore)) {
            context.startActivity(LoginScannerActivity.getStartIntent(context))
        } else {
            context.startActivity(EstablishConnectionActivity.getStartIntent(context))
        }
    }
}
LogoutHeleper
中的关键行是

context.startActivity(LoginScannerActivity.getStartIntent(context))
与堆栈跟踪中的此行相匹配的:

io.workerbase.app.launcher.activity.user.LogoutHelper.logout(LogoutHelper.kt:54)
以及启动应用程序时导致应用程序崩溃的活动意图:

class LoginScannerActivity : WbLauncherBaseActivity() {

    // rest of the code is omitted due to its size, not related to the crash

    companion object {
        @JvmStatic
        fun getStartIntent(context: Context) =
            Intent(context, LoginScannerActivity::class.java).apply {
                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
                addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
            }
    }
}
请注意,当从主活动调用
LogoutHelper.logout*
时,也在应用程序启动时,此崩溃也发生过几次。因此,它不仅在从包替换接收器调用时崩溃,而且大多数崩溃都发生在从接收器调用时

如果您能在这方面给予我帮助,我将不胜感激,因为我从未见过提到
com.android.server.am.TaskRecord.setIntent()

class LoginScannerActivity : WbLauncherBaseActivity() {

    // rest of the code is omitted due to its size, not related to the crash

    companion object {
        @JvmStatic
        fun getStartIntent(context: Context) =
            Intent(context, LoginScannerActivity::class.java).apply {
                addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
                addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
            }
    }
}