Какой из этих 2 вариантов лучше для производительности?
Я использую фрагменты в своем приложении для Android. В этих фрагментах мне нужен объект Context для повторного использования (около 10 раз) с некоторыми вызовами методов.
Как вы знаете, у меня есть 2 варианта:
ВАРИАНТ I:
public class MyFragment extends Fragment{
public void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
//call a lot of methods and use getActivity() a lot of times
}
}
ВАРИАНТ II:
public class MyFragment extends Fragment{
private Activity mActivity;
public void onCreate(Bundle savedInstanceState){
super(savedInstanceState);
mActivity = getActivity();
//call a lot of methods and use mActivity
}
}
Я знаю, что для объявления поля mActivity потребуется некоторое количество памяти (сколько?), Но я думаю, что для вызова getActivity потребуется некоторая обработка ЦП.
Какой из этих 2 вариантов лучше и почему?
РЕДАКТИРОВАТЬ:
Ну, глядя на исходный код Android, я могу найти источник метода getActivity() внутри класса Fragment:
final public FragmentActivity getActivity() {
return mActivity;
}
Итак, как вы можете видеть, во втором варианте mActivity резервируется дважды, что является пустой тратой памяти, поэтому теперь я буду использовать вариант I.
Спасибо за ваши ответы, они заставили меня понять об этом:)
3 ответа
Ну, глядя на исходный код Android, я могу найти источник метода getActivity() внутри класса Fragment:
final public FragmentActivity getActivity() {
return mActivity;
}
Итак, как вы можете видеть, во втором варианте mActivity резервируется дважды, что является пустой тратой памяти, поэтому теперь я буду использовать вариант I.
Спасибо за ваши ответы, они заставили меня понять, что об этом:)
но я думаю, что для вызова getActivity потребуется некоторая обработка процессора.
Это меньше, чем вы думаете. getActivity - это просто доступ к полю, получение Activity. он не сильно задействован в процессоре. Ваш второй метод, который потребует небольшой кучи памяти, а первый потребует небольшого стека, посмотрите на производительность.
С другой стороны. Это преждевременная оптимизация. если у вас нет проблем с памятью, когда текущий код.
Второй вариант лучше. Вы будете использовать getActivity() только один раз. В первом варианте вы будете называть это много раз, что дорого. Объявление о mActivity будет стоить некоторой памяти. Поскольку mActivity на самом деле не объект, а ссылка на объект, это не займет много памяти.