Android 中 RuntimeException(“Stub!”) 的含义

2022-09-01 01:05:42

我正在用Android代码冲浪,因为我想看看Active.finish()方法中有什么。

我只是想确认在里面会有一个对方法的调用。Activity.finish()onDestroy()

但我在这种方法(以及许多其他方法)中发现的是:

public void finish() {
    throw new RuntimeException("Stub!");
}

那么,在哪里可以找到真正破坏活动的代码呢?谢谢!


答案 1

这是因为在 SDK 中找不到源代码。要查看源代码,您需要下载Android SDK的源代码,以便Android Studio可以显示相应的代码。See this image


答案 2

我不知道你在哪里看,但代码是这个finish()

/**
 * 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(DONT_FINISH_TASK_WITH_ACTIVITY);
}

它调用私有实现

/**
 * Finishes the current activity and specifies whether to remove the task associated with this
 * activity.
 */
private void finish(int 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(this);
            }
            if (ActivityManagerNative.getDefault()
                    .finishActivity(mToken, resultCode, resultData, finishTask)) {
                mFinished = true;
            }
        } catch (RemoteException e) {
            // Empty
        }
    } else {
        mParent.finishFromChild(this);
    }
}

这里重要的是,您可以在此文件的第3359行找到 https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ActivityManagerNative.javaActivityManagerNative.getDefault().finishActivity

如果您想更深入地潜水,您可以沿着小径前进。


推荐