3

Я хотел бы узнать, что именно Activity.javasetContentView() метод звонит/делает.Исходный код Android, Java trace, abstract class

Here является исходным кодом Android и код заглушки на линии 1646:

public void setContentView(int layoutResID) { 
    getWindow().setContentView(layoutResID); 
} 

Вот мой след ...

В строке 642, мы знаем, что это типа android.view.Window

private Window mWindow; 

Но Window.java - это абстрактный класс. А в строке 738, метод является абстрактным также:

public abstract void setContentView(int layoutResID); 

Где осуществляться фактическая функция тела?

Назад к файлу Activity.java, в строке 3746, мы находим некоторые инициализации из mWindow:

mWindow = PolicyManager.makeNewWindow(this); 
mWindow.setCallback(this); 
... 

Ну, про com.android.internal.policy.PolicyManager «s makeNewWindow():

public static Window makeNewWindow(Context context) { 
    return sPolicy.makeNewWindow(context); 
} 

и

private static final IPolicy sPolicy; 
Class policyClass = Class.forName(POLICY_IMPL_CLASS_NAME); 
sPolicy = (IPolicy)policyClass.newInstance(); 

IPolicy.java - это интерфейс, что означает отсутствие реализации вообще.

Мой след не может быть продолжен. Не могли бы вы помочь мне?

В частности, я знаю Activity.setContentView() в конечном счете называют android.support.v4.app.Fragment.java «s Fragment.onInflate() - линия 920, Fragment.onAttach() - линия 928, Fragment.onCreate() - линия 953, Fragment.onCreateView() - линия 967, и Fragment.onViewCreated() - линия 991.

+0

«В частности, я знаю, что Activity.setContentView() в конечном итоге вызовет android.support.v4.app.Fragment.java Fragment.onInflate()» - нет, это не так. 'Активность' ничего не знает о' android.support.v4.app.Fragment'. 'Активность' может что-то знать о' android.app.Fragment'. 'android.support.v4.app.FragmentActivity' может что-то знать о' android.support.v4.app.Fragment'. – CommonsWare

+0

Да @CommonsWare, вы правы. Фактически, согласно исходному коду, 'Fragment.onAttach()', 'Fragment.onCreate()', 'Fragment.onCreateView()' и 'Fragment.onViewCreated()' вызывается в 'FragmentActivity.onCreate()' > 'mFragments.dispatchCreate()'> 'FragmentManager.moveToState (Fragment.CREATED, false)'. Но удивительно, что я добавил некоторые 'System.out.println()' s до и после 'setContentView()' и в этих методах 'Fragment'. Похоже, что методы 'Fragment' вызываются внутри' setContentView() '. – midnite

+0

Возможный дубликат [Некоторая поддержка Java с источником Android, пожалуйста?] (Http: // stackoverflow.ком/вопросы/16764572/некоторые-ява-помогает-с-андроида-исток-пожалуйста) – StarPinkER

ответ

0

Вы можете найти это источники здесь

реализация политики: source

реализация окна: source