Signification de RuntimeException ("Stub!") dans Android

je surfais en code Android parce que je voulais voir ce qui est en activité.finish() méthode.

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

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

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

alors où puis-je trouver le code qui détruit vraiment l'activité? Merci!

19
demandé sur Sneh Pandya 2016-10-07 12:10:28

4 réponses

c'est parce que le code source n'est pas trouvé dans SDK. Pour voir le code source, vous avez besoin de télécharger source pour Android SDK, de sorte que Android studio peut afficher le code respectif. See this image

25
répondu hakim 2017-10-21 09:08:55

que Vous enregistrez .classe pas .fichier java.

3
répondu Mundroid 2017-03-30 09:40:24

je ne sais pas où vous avez regardé, mais le code pour finish() est-ce

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

ce qui appelle l'implémentation 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 est ici 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 la piste.

1
répondu Tim Castelijns 2016-10-07 09:14:37

Rechercher sur android des sources disponibles au grepcode, où vous pouvez chercher et comparer le code de différentes versions du sdk

0
répondu Alex Klimashevsky 2016-10-07 09:21:25