web-dev-qa-db-ja.com

AndroidのRuntimeException( "Stub!"))の意味

Activity.finish()メソッドの内容を確認したいので、Androidコードでサーフィンしていました。

Activity.finish()onDestroy()メソッドの呼び出しがあることを確認したかっただけです。

しかし、この方法(および他の多くの方法)で私が見つけたのは:

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

アクティビティを実際に破壊するコードはどこにありますか?ありがとう!

28
Alex Mawashi

これは、SDKにソースコードが見つからないためです。ソースコードを表示するには、Android SDKのソースをダウンロードする必要があります。したがって、Androidスタジオはそれぞれのコードを表示できます。 See this image

27
hakim

あなたがどこを見たのかわかりませんが、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
Tim Castelijns

.Javaファイルではなく.classをチェックインしています。

2
Mundroid