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!
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.
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.
Rechercher sur android des sources disponibles au grepcode, où vous pouvez chercher et comparer le code de différentes versions du sdk