Форум программистов, компьютерный форум CyberForum.ru

Handler при пересоздании активити - Android

Войти
Регистрация
Восстановить пароль
 
 
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
07.07.2016, 16:06     Handler при пересоздании активити #1
У меня есть поток Thread, который запускается во фрагменте и получает ссылку на изображение с сервера(парсит JSON выделяет ссылку). И Handler который связан с UI потоком, запускает Runnable в UI потоке, в котором через Glide загружает изображение в Layout. Вопрос в следующем: фрагмент может пересоздаваться не только при поворотах, а и при смене языка и доступности клавиатуры и др ситуации. И в итоге после этого пересоздания с Handlerом начнутся проблемы. Что нужно делать с Handlerом при пересоздании активити? Как учесть этот момент? Может в onDestroy() как то можно его отменять можете рассказать решение??
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.07.2016, 16:06     Handler при пересоздании активити
Посмотрите здесь:

Запуск анимации при старте активити Android
Android ListView и мультивыбор при открытии активити
Android Изменение параметров активити из другого активити
Вылет при переходе на второй активити Android
Утечка памяти при использовании Handler Android
Не передаются значения при их передаче в другое активити Android
Android Вывести popup-окно при запуске активити
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
10.07.2016, 19:56  [ТС]     Handler при пересоздании активити #21
через Glide
Java
1
2
3
4
5
6
7
8
9
Glide.with(context).load(image).asBitmap().into(new SimpleTarget<Bitmap>(100, 100) {
                                @Override
                                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                                    Drawable drawable = new BitmapDrawable(resource);
                                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                                        scrollview.setBackground(drawable);
                                    }
                                }
                            });
Но проблема в другом в onDestroy делаю
Java
1
2
3
4
5
6
7
8
@Override
    protected void onDestroy() {
        h.removeCallbacksAndMessages(null);
        super.onDestroy();
 
        Log.d("Func", "MainActivity: onDestroy()");
 
    }
И Handler все равно обраается к несуществующим элементам как исправить это?

Добавлено через 41 минуту
Java
1
2
3
4
public void changeFragmentTextView1(String s) {
        Fragment frag = getFragmentManager().findFragmentById(R.id.fragment1);
        ((TextView) frag.getView().findViewById(R.id.textView)).setText(s);
    }
Код который обращается к TextView во фрагменте который находится в активити. Эта функция вызывается в Runnable Handleraи из другого потока и приложение падает как исправить это?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vxg
Модератор
 Аватар для vxg
2727 / 1738 / 173
Регистрация: 13.01.2012
Сообщений: 6,517
10.07.2016, 20:09     Handler при пересоздании активити #22
yura91, если glide загружает изображение и при завершении загрузки даёт вам об этом знать отдавая bitmap то что мешает иметь static поле у application которому вы бы присвоили этот bitmap и из которого в oncreate или в ином месте вы бы забирали его для ui? Кроме того имея bitmap вы можете сбросить его на диск и при запуске программы пользоваться уже загруженными данными если их обновление не требуется (хотя может этим занят glide я просто с ним не работал)
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
10.07.2016, 20:29  [ТС]     Handler при пересоздании активити #23
Glide кэширует изображения. Ну просто проблема то в том что Hanler обращается к несуществующему TextView во фрагменте при повороте как с этим быть?

Добавлено через 44 секунды
Приложение от этого падает с NullPointerException если не запрещать пересоздание активити при смене ориентации.

Добавлено через 1 минуту
то есть он отдает результат в несуществующий фрагмент

Добавлено через 6 минут
То есть бывает такое что активити пересоздалось а Handler обращается к старому обьекту которого не существует и как эту проблему решать?
vxg
Модератор
 Аватар для vxg
2727 / 1738 / 173
Регистрация: 13.01.2012
Сообщений: 6,517
10.07.2016, 20:36     Handler при пересоздании активити #24
yura91, хандл не может обратится к мертвому Активити если вы сами к этому руку не приложили - система не может убить Активити если ссылка на неё есть у хандла - если будет пересоздание то хандл будет работать с дохлой Активити но это будет легально - краша быть не должно просто вы не увидите результата его работы так как Активити дохлая и на экране не она
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
10.07.2016, 22:20  [ТС]     Handler при пересоздании активити #25
А через sendMassage() нужно работать с Handlerom да? А смотрите если я сделал сетевой запрос в потоке распарсил JSON и хочу вывести результат в TextView, то как мне из потока в handleMassege() передать String например для обработки, ну чтобы вывести его на экран?

Добавлено через 45 минут
Через Handler в UI можно как нибудь объект String например передать? Как это можно сделать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2016, 22:33     Handler при пересоздании активити
Еще ссылки по теме:

Ошибка при вызове активити Android
Ошибка при при смене активити Android
Android Работа с Handler из другого активити
При переходе между активити возникает ошибка Android
Сохранение данных при пересоздании активити Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
vxg
Модератор
 Аватар для vxg
2727 / 1738 / 173
Регистрация: 13.01.2012
Сообщений: 6,517
10.07.2016, 22:33     Handler при пересоздании активити #26
yura91, лично я использую хандл как описал и в этом коде он имеет доступ к активити. Иного метода для себя не открыл но видел людей которые знают как это сделать. Помню лишь магическое слово обсервер

Добавлено через 2 минуты
Заполнить строки данными из отдельного класса
Yandex
Объявления
10.07.2016, 22:33     Handler при пересоздании активити
Ответ Создать тему
Опции темы

Текущее время: 08:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru