尝试调用虚拟方法';void com.android.server.am.TaskRecord.setIntent(com.android.server.am.ActivityRecord)和#x27;关于空对象引用
我们的Launcher系统应用程序很少在更新后立即崩溃(尝试调用虚拟方法';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
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)
}
}
}