Ответ 1
Это связано с тем, что исходный код не найден в SDK.
Чтобы увидеть исходный код, вам необходимо загрузить исходный код для Android SDK, поэтому студия Android может отобразить соответствующий код.
Я занимался серфингом в Android-коде, потому что хотел посмотреть, что есть в методе Activity.finish().
Я просто хотел получить подтверждение, что в Activity.finish()
будет вызов метода onDestroy()
.
Но то, что я нашел в этом методе (и во многих других), было следующим:
public void finish() {
throw new RuntimeException("Stub!");
}
Итак, где я могу найти код, который действительно разрушает Activity? Спасибо!
Это связано с тем, что исходный код не найден в SDK.
Чтобы увидеть исходный код, вам необходимо загрузить исходный код для Android SDK, поэтому студия Android может отобразить соответствующий код.
Я не знаю, где вы смотрели, но код для 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
Если вы хотите погрузиться глубже, вы можете просто следовать по тропе.
Поиск в источниках android также доступен в grepcode, где вы можете искать и сравнивать код из разных версий sdk
Вы проверяете файл .class, а не .java.