2016-10-07 27 views
12

Tôi đã lướt web trong mã Android vì tôi muốn xem những gì là vào phương thức Activity.finish().ý nghĩa của RuntimeException ("Stub!") Trong Android

Tôi chỉ muốn có xác nhận rằng trong Activity.finish() sẽ có một cuộc gọi đến phương thức onDestroy().

Nhưng những gì tôi tìm thấy trong phương pháp này (và trong nhiều người khác) là:

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

Vì vậy, nơi tôi có thể tìm ra mã mà thực sự phá hủy các Hoạt động? Cảm ơn!

+0

Bản sao có thể có của [SQLiteDatabase getWritableDatabase() {throw new RuntimeException ("Stub!"); }] (https://stackoverflow.com/questions/27651148/sqlitedatabase-getwritabledatabase-throw-new-runtimeexceptionstub) –

Trả lời

20

Điều này là do mã nguồn không được tìm thấy trong SDK. Để xem mã nguồn, bạn cần tải xuống nguồn cho Android SDK, vì vậy Android studio có thể hiển thị mã tương ứng. See this image

+1

Điều này đúng, nhưng lưu ý rằng nó sẽ không tải xuống bất kỳ lớp Native nào –

+0

Rất lạ vì tôi có trong Trình quản lý SDK> Giao diện & Hành vi> Cài đặt hệ thống> SDK Android> Nền tảng SDK> Android 7.0 (Nougat)> Nguồn cho Android 24 (CÀI ĐẶT) ... Nhưng khi tôi truy cập Hoạt động của lớp ở phần trên của trình chỉnh sửa, có thông báo này: Nguồn cho Không tìm thấy 'Nền tảng Android API 24'. Tôi nhấp vào Tải xuống, nhưng không có gì xảy ra! : -O –

+1

@AlexMawashi vui lòng, khởi động lại studio android của bạn, dựa trên kinh nghiệm của tôi, đôi khi nó hoạt động sau khi AS khởi động lại – hakim

1

tôi không biết nơi bạn nhìn, nhưng mã cho finish() là này

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

trong đó kêu gọi việc thực hiện tin

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

quan trọng ở đây là ActivityManagerNative.getDefault().finishActivity mà bạn có thể tìm thấy ở dòng 3359 trong tệp này https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/app/ActivityManagerNative.java

Nếu bạn muốn đi sâu hơn, bạn có thể theo dõi đường nhỏ.

0

Tìm kiếm trên nguồn android cũng có sẵn tại grepcode, nơi bạn có thể tìm kiếm và so sánh các mã từ phiên bản sdk khác nhau

0

Bạn đang kiểm tra trong .class không java file.