Значение RuntimeException ( "Stub!" ) в Android

Я занимался серфингом в Android-коде, потому что хотел посмотреть, что есть в методе Activity.finish().

Я просто хотел получить подтверждение, что в Activity.finish() будет вызов метода onDestroy().

Но то, что я нашел в этом методе (и во многих других), было следующим:

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

Итак, где я могу найти код, который действительно разрушает Activity? Спасибо!

Ответ 1

Это связано с тем, что исходный код не найден в SDK. Чтобы увидеть исходный код, вам необходимо загрузить исходный код для Android SDK, поэтому студия Android может отобразить соответствующий код. См. это изображение

Ответ 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);
    }
}

Важно здесь ActivityManagerNative.getDefault().finishActivity, которое вы можете найти в строке 3359 в этом файле https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ActivityManagerNative.java

Если вы хотите погрузиться глубже, вы можете просто следовать по тропе.

Ответ 3

Поиск в источниках android также доступен в grepcode, где вы можете искать и сравнивать код из разных версий sdk

Ответ 4

Вы проверяете файл .class, а не .java.