Android 中 RuntimeException("Stub!") 的含义
meaning of RuntimeException("Stub!") in Android
我正在浏览 Android 代码,因为我想看看 Activity.finish() 方法中有什么。
我只是想确认在 Activity.finish()
中会调用 onDestroy()
方法。
但我在这个方法(以及许多其他方法)中发现的是:
public void finish() {
throw new RuntimeException("Stub!");
}
那么我在哪里可以找到真正破坏 Activity 的代码?
谢谢!
我不知道你在哪里看的,但是 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
如果你想深入了解,可以沿着这条路走。
这是因为在SDK中找不到源代码。
要查看源代码,您需要下载 Android SDK 的源代码,以便 Android studio 可以显示相应的代码。
您正在签入 .class 而不是 .java 文件。
我正在浏览 Android 代码,因为我想看看 Activity.finish() 方法中有什么。
我只是想确认在 Activity.finish()
中会调用 onDestroy()
方法。
但我在这个方法(以及许多其他方法)中发现的是:
public void finish() {
throw new RuntimeException("Stub!");
}
那么我在哪里可以找到真正破坏 Activity 的代码? 谢谢!
我不知道你在哪里看的,但是 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
如果你想深入了解,可以沿着这条路走。
这是因为在SDK中找不到源代码。
要查看源代码,您需要下载 Android SDK 的源代码,以便 Android studio 可以显示相应的代码。
您正在签入 .class 而不是 .java 文件。