#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"