Activity.finish()メソッドの内容を確認したいので、Androidコードでサーフィンしていました。
Activity.finish()
にonDestroy()
メソッドの呼び出しがあることを確認したかっただけです。
しかし、この方法(および他の多くの方法)で私が見つけたのは:
public void finish() {
throw new RuntimeException("Stub!");
}
アクティビティを実際に破壊するコードはどこにありますか?ありがとう!
あなたがどこを見たのかわかりませんが、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
さらに深く潜りたい場合は、トレイルをたどることができます。
.Javaファイルではなく.classをチェックインしています。