Какой из этих 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 на самом деле не объект, а ссылка на объект, это не займет много памяти.

Другие вопросы по тегам