繁体   English   中英

FinishAffinity() 后的 NPE

[英]NPE after finishAffinity()

我有这个代码:

Api.logout(() -> {
   //Do some work cleaning up

   ActivityCompat.finishAffinity(this)
   startActivity(new Intent(this, SignInActivity.class))
})

此代码不断抛出异常:

java.lang.NullPointerException: Attempt to read from field 'com.android.server.am.TaskRecord com.android.server.am.ActivityRecord.task' on a null object reference
    at android.os.Parcel.readException(Parcel.java:1546)
    at android.os.Parcel.readException(Parcel.java:1493)
    at android.app.ActivityManagerProxy.finishActivityAffinity(ActivityManagerNative.java:2709)
    at android.app.Activity.finishAffinity(Activity.java:4717)
    at android.support.v4.app.ActivityCompat.finishAffinity(ActivityCompat.java:287)
    at my.app.api.Api.lambda$logout$0(Api.java:43)
    at my.app.MainActivity.performLogOut(MainActivity.java:90)
    at retrofit2.ExecutorCallAdapterFactory$ExecutorCallbackCall$1$1.run(ExecutorCallAdapterFactory.java:68)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5261)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:939)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:734)

看起来这个错误在于ActivityCompat.finishAffinity方法。

是什么导致了错误以及如何修复它?

首先,调用 Intent 然后完成 Activity,否则调用 Intent 时 Activity Context 将为 null。

startActivity(new Intent(this, SignInActivity.class))
ActivityCompat.finishAffinity(this)

在我的情况下,这发生在活动已经finishedisFinishing 我只找到了一种解决方案:

override fun onDestroy() {
   super.onDestroy()
   // kill or unsubscribe your `Api` here
}

我的代码看起来像这样:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.some_activity)

    handler = Handler(mainLooper)
}

private fun someMethod() {
   handler.postDelayed({ finishAffinity() }, 10000)
}

override fun onDestroy() {
    super.onDestroy()
    handler.removeCallbacksAndMessages(null)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM