web-dev-qa-db-fra.com

signification de RuntimeException ("Stub!") dans Android

Je surfais dans le code Android parce que je voulais voir ce qu'il y avait dans la méthode Activity.finish ().

Je voulais juste avoir la confirmation que dans Activity.finish() il y aurait un appel à la méthode onDestroy().

Mais ce que j'ai trouvé dans cette méthode (et dans beaucoup d'autres) était:

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

Alors OERE puis-je trouver le code qui détruit vraiment l'activité? Merci!

28
Alex Mawashi

En effet, le code source est introuvable dans le SDK. Pour voir le code source, vous devez télécharger la source pour Android SDK, donc Android studio peut afficher le code respectif. See this image

27
hakim

Je ne sais pas où vous avez regardé, mais le code de finish() est le suivant

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

qui appelle la mise en œuvre privée

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

L'important ici est ActivityManagerNative.getDefault().finishActivity que vous pouvez trouver à la ligne 3359 dans ce fichier https://Android.googlesource.com/platform/frameworks/base/+/master/core/Java/Android/ app/ActivityManagerNative.Java

Si vous voulez plonger plus profondément, vous pouvez simplement suivre le sentier.

3
Tim Castelijns

Vous archivez le fichier .class et non .Java.

2
Mundroid