Android (!activity.isFinishing())是检查活动是否已销毁的方法吗?isFinishing()与IsDestroyed()的比较

Android (!activity.isFinishing())是检查活动是否已销毁的方法吗?isFinishing()与IsDestroyed()的比较,android,Android,调用FragmentManager时,我收到一条错误消息,表示活动已被销毁。FragmentManager在进行事务调用之前是否可以进行检查,或者我是否需要获取活动并检查它是否为null或!activity.isFinishing()?我还需要做其他检查吗?这是我过去常做的事,但我不确定这是否仍然是我现在要做的事?只是好奇为什么片段管理器不知道活动的状态。。。我需要介绍活动即将被销毁和已经被销毁的情况()。无论哪种情况,我都不想提交事务 更新:适用于API 17+活动。isDestroyed()

调用FragmentManager时,我收到一条错误消息,表示活动已被销毁。FragmentManager在进行事务调用之前是否可以进行检查,或者我是否需要获取活动并检查它是否为null或!activity.isFinishing()?我还需要做其他检查吗?这是我过去常做的事,但我不确定这是否仍然是我现在要做的事?只是好奇为什么片段管理器不知道活动的状态。。。我需要介绍活动即将被销毁和已经被销毁的情况()。无论哪种情况,我都不想提交事务

更新:适用于API 17+活动。isDestroyed()可用。对于API<17,仍然需要确认activity.isFinishing()将检测到已破坏的活动,或者是否有其他方法来检测

  if ((activity != null) && !activity.isFinishing()) {
      fm.FragmentTransaction fragmentTransaction = 
      fm.beginTransaction().replace(R.id.fragment_container, mFeedFragment).commitAllowingStatelessLoss();
  }
试试这个
布尔isDestroyed()

如果对活动进行了最后的
onDestroy()
调用,则返回true,因此此实例现在已死亡

以下是在活动不可见之前执行任何任务的方法

  • -在销毁活动之前执行任何最终清理
  • -检查此活动是否正在完成过程中
  • -当活动对用户不再可见时调用
  • -当活动进入后台但尚未(尚未)终止时,作为活动生命周期的一部分调用
  • -当活动检测到用户按下后退键时调用。默认实现只是完成当前活动,但是您可以覆盖它来执行任何您想要的操作
最好的办法是检查
Activity.isFinishing()
。如果
为真
,则使用此类
活动
是不安全的,如果
为假
,至少我们知道
活动
的销毁尚未触发

推理

  • 检查
    活动
    是否为
    null
    并不意味着
    活动
    为空 摧毁。
    活动
    可以被销毁并保留数据 在它里面创造的
  • 检查是否有来自状态的
    Activity.isDestroyed()

    如果对活动进行了最后一次onDestroy()调用,则返回true,因此此实例现在已死亡

    死亡实例是什么意思,idk,我在网上找不到 互联网是一个完整的答案,但在这种情况下,它显然并不意味着
    null
    。 因此,
    死实例!=空

  • 检查是否有来自状态的
    Activity.isFinishing()

    检查此活动是否处于完成过程中,可能是因为您对其调用了finish(),也可能是因为其他人调用了finish() 要求把它完成。这通常在onPause()中用于 确定活动是暂停还是完全停止 完成

  • 调用
    Activity.finish()
    将调用
    Activity.ondestory()
    。 然而,在Robolectric的帮助下做了一些测试后,它认为在调用
    Activity.finish()

    Activity.isFinishing()==true
    Activity.isDestroyed()==false

    为什么,查查


但是如果isFinishing()也被调用(),这是必要的吗?我认为isFinishing()在被销毁后可能会返回true。你怎么看?@gitsFinishing方法如果活动正在完成,则返回true,否则返回false。好的,看来有必要检查是否完成或同时销毁这两个。毕竟,如果它正在完成,那么在调用为isDestroyed()返回false后的任何毫秒,它都可能被销毁。至少在理论上是这样。事实上,如果某个东西(此活动、另一个活动……任何东西)对您的活动调用了finish(),isFinishing()将返回true。。您可以在生命周期方法中使用isFinishing来检测活动是否因为system或finish()调用而停止。。。