Android 中 RuntimeException("Stub!") 的含义

meaning of RuntimeException("Stub!") in Android

我正在浏览 Android 代码,因为我想看看 Activity.finish() 方法中有什么。

我只是想确认在 Activity.finish() 中会调用 onDestroy() 方法。

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

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

那么我在哪里可以找到真正破坏 Activity 的代码? 谢谢!

我不知道你在哪里看的,但是 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);
    }
}

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

如果你想深入了解,可以沿着这条路走。

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

您正在签入 .class 而不是 .java 文件。