Ссылка на активность Android обнуляется при нехватке памяти

#android #android-fragments #memory #android-activity #low-memory

#Android #android-фрагменты #память #android-активность #нехватка памяти

Вопрос:

У меня есть действие, которое содержит фрагмент, и этот фрагмент воспроизводит видео YouTube с помощью Android youtube api, и я регистрирую прослушиватель событий для видео YouTube, когда оно заканчивается. В onVideoEnded событии я получаю ссылку на действие, чтобы выполнить что-то, какое-то действие, и вот как я получаю действие внутри моего фрагмента :

 private Activity theActivity;
@Override
    public void onAttach(Context context) {
        super.onAttach(context);
        theActivity = (Activity) context;
    }

    /*
     * Deprecated on API 23
     * Use onAttachToContext instead
     */
    @SuppressWarnings("deprecation")
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        if (Build.VERSION.SDK_INT < 23) {
            theActivity = activity;
        }
    }

    @Override
    public void onDetach() {
        super.onDetach();
        theActivity = null;
    }

protected Activity getTheActivity() {
        Activity activity = getActivity();
        if (activity != null)
            return activity;
        else return this.theActivity;
    }
  

Как вы можете видеть в моем getTheActivity методе, я сначала проверяю getActivity метод, и если он возвращает нулевое значение, я получаю переменную, полученную из onAttach при создании фрагмента.
Однако на таких устройствах, как Samsung getTheActivity , метод по-прежнему возвращает null!
Я думаю, что это, вероятно, проблема с нехваткой памяти!
Как я могу получить ссылку на мою активность при любых обстоятельствах из моего фрагмента?

Комментарии:

1. Видна ли активность в этот момент? Или вы говорите о каком-то крайнем случае?

2. @azizbekian я действительно не могу знать, так как я получаю эти отчеты от crashlytics!

3. Обратный вызов мог быть вызван в тот момент, когда пользователь перевел действие в фоновый режим. У вас нет гарантий, что экземпляр активности хостинга будет там в этот момент.

4. Я думаю, что если бы пользователь переместил действие в фоновый режим, оно было бы уничтожено, поскольку я использую в своем манифесте android: noHistory =»true» @azizbekian

5. if the user moved the activity into the background it would have been destroyed Не совсем верно. Активность будет уничтожена в случае, если система решит завершить процесс. Приостанавливаете ли вы свое видео на YouTube, когда пользователь переходит из приложения?

Ответ №1:

Добавьте эти две строки в свой файл манифеста в тег приложения

  android:hardwareAccelerated="false"
 android:largeHeap="true"