2016-10-07 39 views
12

Androidコードでサーフィンしていたのは、Activity.finish()メソッドが何であるかを知りたいからでした。AndroidのRuntimeException( "Stub!")の意味

私はちょうどActivity.finish()onDestroy()メソッドの呼び出しがあるだろう確認を持っていると思いました。

しかし、私はこの方法で見つかった(および他の多くで)した

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

だから私は本当に活動を破壊するコードを見つけることができますか? ありがとう!

+0

可能な複製[SQLiteDatabase getWritableDatabase(){throw new RuntimeException( "Stub!"); }](https://stackoverflow.com/questions/27651148/sqlitedatabase-getwritabledatabase-throw-new-runtimeexceptionstub) –

答えて

20

これは、SDKにソースコードが見つからないためです。 ソースコードを見るには、Android SDKのソースをダウンロードする必要があります。そのため、Androidスタジオはそれぞれのコードを表示できます。 See this image

+1

これは当てはまりますが、ネイティブクラスをダウンロードしないことに注意してください。 –

+0

SDKマネージャがあるために非常に奇妙です> AndroidのSDK(SDK)プラットフォーム> Android 7.0(Nougat)> Android 24のソース(INSTALLED)...しかし、エディタの上部にあるアクティビティクラスにアクセスすると、次のメッセージが表示されます。 「Android API 24 Platform」が見つかりません。私はダウンロードをクリックしますが、何も起こりません! :-O –

+1

@AlexMawashi、私の経験に基づいて、あなたのアンドロイドスタジオを再起動してください、時々それは再起動後に動作します – hakim

1

あなたが見てどこ私は知らないが、finish()のコードは、あなたがライン3359で見つけることができるActivityManagerNative.getDefault().finishActivityあり、ここで重要な

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

プライベート実装を呼び出し、この

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

ですこのファイルのhttps://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ActivityManagerNative.java

さらに深く掘り下げたい場合は、その道をたどることができます。

0

あなたが見て、あなたが.classファイルの.javaないファイルをチェックインする

0

異なるSDKのバージョンからコードを比較することができgrepcodeでも利用できるアンドロイドソースの検索、。