gpt4 book ai didi

Android - 在 Activity 被销毁后,isFinishing() 的值是否会保持为真?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:04:36 27 4
gpt4 key购买 nike

如果这个问题听起来非常基础,我们深表歉意。我有一个具有异步网络回调的 Activity。回调可以在用户离开 Activity 后执行。

作为检查,我想使用 isFinishing()(我不能使用 isDestroyed(),因为我的最低 API 级别是 16 而不是 17, isDestroyed() 需要)。

我能否在回调中使用 isFinishing() 来确保我的逻辑仅在 Activity 未被销毁时执行?

更具体地说,对于通过调用 finish() 销毁的 Activity,即使在调用 onDestroy() 之后,isFinishing() 也会返回 true ?

我还看了源代码。这是 isFinishing():

    public boolean isFinishing() {
return mFinished;
}

这是变量设置为 true 的 finish():

   /**
* Finishes the current activity and specifies whether to remove the task associated with this
* activity.
*/
private void finish(boolean finishTask) {
if (mParent == null) {
int resultCode;
Intent resultData;
synchronized (this) {
resultCode = mResultCode;
resultData = mResultData;
}
if (false) Log.v(TAG, "Finishing self: token=" + mToken);
try {
if (resultData != null) {
resultData.prepareToLeaveProcess();
}
if (ActivityManagerNative.getDefault()
.finishActivity(mToken, resultCode, resultData, finishTask)) {
mFinished = true;
}
} catch (RemoteException e) {
// Empty
}
} else {
mParent.finishFromChild(this);
}
}

/**
* Call this when your activity is done and should be closed. The
* ActivityResult is propagated back to whoever launched you via
* onActivityResult().
*/
public void finish() {
finish(false);
}

我也看过Understanding of isFinishing()但我似乎无法得出这个特定问题的答案。

最佳答案

javadoc 以来,您的问题可能是一个很好的答案。 Activity.isFinishing() 未指定已销毁的 Activity 的返回值。但是,根据 source 判断似乎一点也不混淆的名称 mFinished(由 isFinishing() 使用)从未设置为 false(除了在初始化时)所以一旦设置为 true 将始终保持该值。话虽如此,mFinished 是包私有(private)的,因此理论上另一个类可以修改该值。在实践中,我认为假设 isFinishing() 返回 true 是安全的,前提是 Activity 正在完成或已经完成!

换句话说,isFinishing() == isFinishing() || isDestroyed()

关于Android - 在 Activity 被销毁后,isFinishing() 的值是否会保持为真?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39204876/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com