2016-10-07 19 views
12

Surfowałem w kodzie Android, ponieważ chciałem zobaczyć, co jest w metodzie Activity.finish().znaczenie RuntimeException ("Stub!") W Androidzie

Po prostu chciałem mieć potwierdzenie, że w Activity.finish() będzie połączenie z metodą onDestroy().

Ale co znalazłem w tej metodzie (i wielu innych) była następująca:

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

Więc gdzie mogę znaleźć kod, który naprawdę niszczy działalność? Dzięki!

+0

Możliwy duplikat [SQLiteDatabase getWritableDatabase() {throw new RuntimeException ("Stub!"); }] (https://stackoverflow.com/questions/27651148/sqlitedatabase-getwritabledatabase-throw-new-runtimeexceptionstub) –

Odpowiedz

20

Jest tak, ponieważ kod źródłowy nie został znaleziony w SDK. Aby zobaczyć kod źródłowy, musisz pobrać źródło dla Androida SDK, aby studio Androida mogło wyświetlać odpowiedni kod. See this image

+1

To prawda, ale pamiętaj, że nie będzie pobierał żadnych klas Native –

+0

Bardzo dziwne, ponieważ mam w Menedżerze SDK> Wygląd i zachowanie> Ustawienia systemowe> Zestaw SDK dla Androida> Platformy SDK> Android 7.0 (Nougat)> Źródła dla Androida 24 (ZAINSTALOWANE) ... Ale kiedy odwiedzę zajęcia klasy w górnej części edytora, pojawia się następujący komunikat: Źródła dla Nie znaleziono "platformy Android API 24". Klikam przycisk Pobierz, ale nic się nie dzieje! : -O –

+1

@AlexMawashi, proszę, uruchom ponownie swoje studio na Androida, na podstawie mojego doświadczenia, czasami działa po AS zrestartował – hakim

1

Nie wiem, gdzie spojrzał, ale kod dla finish() jest to

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

który wywołuje prywatną realizację

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

Ważne tutaj jest ActivityManagerNative.getDefault().finishActivity które można znaleźć na linii 3359 w tym pliku https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ActivityManagerNative.java

Jeśli chcesz zanurkować głębiej, możesz po prostu podążać szlakiem.

0

Szukaj w Android źródeł dostępne również na grepcode, gdzie można szukać i porównaj kod z różnych wersji SDK

Powiązane problemy