@android_ru

Страница 1038 из 3205
Roman
27.02.2017
15:41:15
В примере используется ConcurrentMap, так что думаю потоков несколько

Konstantin
27.02.2017
15:41:25
У вас видимо несколько потоков модифицируют данные одновременно.Сделайте синхронизатор.

Roman
27.02.2017
15:41:43
Привет! Вопрос по поводу реакции на смену системного размера шрифта. Есть у меня активити, в ней RootFragment, в нем в лэйаут добавляется еще один фрагмент ChildFragment в onViewCreated Rootfragment'а В манифесте в активити рутфрагмента НЕ прописано android:configChanges=fontScale (типа обработать смену системного шрифта должна сама активити) Меняю шрифт с Normal на Huge возвращаюсь в приложение, активити пересоздается, зовутся коллбэки лайфсайкла на RootFragment'е и на ChildFragment'у, ChildFragment невидим ( Становится видимым только после перезапуска приложения. Чот не пойму, эт как так?

Roman
27.02.2017
15:43:07
protected void onLooperPrepared() { mRequestHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == MESSAGE_DOWNLOAD) { T target = (T) msg.obj; Log.i(TAG, "Got a request for URL: " + mRequestMap.get(target)); handleRequest(target); } } }; }

Google
Roman
27.02.2017
15:43:41
Написал

handleRequest(target); это что то типа этого: https://forums.bignerdranch.com/t/challenge-using-lrucache/11009

Quantum Harmonizer
27.02.2017
15:44:38
А какую роль тогда выполняет лупер?

Gleb
27.02.2017
15:45:09
если то про это



то сделать битмап приватным полем - плохая идея

Roman
27.02.2017
15:46:06
Я его сделал приватным и получил удесный эффект

Quantum Harmonizer
27.02.2017
15:46:21
то сделать битмап приватным полем - плохая идея
...потому что пока выполнится колбэк поле уже много раз поменяется.

Roman
27.02.2017
15:47:03
Ну вот да. Как тогда обрабатывать эту поле ?

Gleb
27.02.2017
15:47:17
...потому что пока выполнится колбэк поле уже много раз поменяется.
? именно... потому он и финальный и создается внутри метода и аргументом отдается в будущий runnable

Quantum Harmonizer
27.02.2017
15:47:23
Roman
27.02.2017
15:47:55
Если я пишу final Bitmap bitmap = bla-bla то изменить уже его не могу

Google
Quantum Harmonizer
27.02.2017
15:48:21
Сформулируй задачу.

Roman
27.02.2017
15:49:04
Задача решена уже. Доставать битмап из кеша если он есть или закачивать

Aidar
27.02.2017
15:49:36
Roman
27.02.2017
15:50:17
Но я не понял какие варианты кроме Final bitmap. Если я делаю переменную - то она портится из-за конкуретных процессов

Aidar
27.02.2017
15:51:09
Передай куданибудь

В конструктор

Куда угодно

Ты анонимный класс написал же

Quantum Harmonizer
27.02.2017
15:52:12
В конструктор
По факту это и происходит.

Aidar
27.02.2017
15:52:33
По факту захват в джаве только на финальную фигню работает

Ну вообще то логично

Quantum Harmonizer
27.02.2017
15:53:27
Если бы она не была финальной, было бы много трудноуловимых багов.

Aidar
27.02.2017
15:53:50
Я предлагаю вынести этот обработчик явно в класс

Aidar
27.02.2017
15:54:06
Это красивее будет

Они и были.
Нет джава этого не позволяет

Вы просто захватили this а он тоже final

А баги у вас потому что из разных потоков меняете

Roman
27.02.2017
15:55:49
Смущает что оно компилировалось и работало. Вот почему я и заинтересовался

Google
Aidar
27.02.2017
15:56:16
Что не должно было скомпилится?

Тут статический анализатор бессилен

Roman
27.02.2017
15:57:42
Это стандартная особенность работы в нескольких потоках для джавы?

Aidar
27.02.2017
15:58:21
То что вы значения меняете из 2 потоков и не успеваете их обработать?

Quantum Harmonizer
27.02.2017
15:58:22
Какая особенность работы? Что прочитавая значение поля получаешь значение поля?

Aidar
27.02.2017
15:58:37
Это стандартная особенность потоков вообще

Roman
27.02.2017
15:59:04
Я предлагаю вынести этот обработчик явно в класс
Это про обработчик: protected void onLooperPrepared() { mRequestHandler = new Handler() { ?

Aidar
27.02.2017
15:59:19
Это было про runnable

Но тут несуть

Это никак не изменит ситуацию

Roman
27.02.2017
16:03:35
Какая особенность работы? Что прочитавая значение поля получаешь значение поля?
Состояние private переменной класса непредсказуемо когда в нее пишут и читают из разных потоков.

Anton
27.02.2017
16:04:10
прайват тут причем?

Anton
27.02.2017
16:04:32
это же модификатор доступа не?

Quantum Harmonizer
27.02.2017
16:05:08
Состояние private переменной класса непредсказуемо когда в нее пишут и читают из разных потоков.
Даже если считать его предсказуемым и использовать atomic/volatile, в данном случае это неправильное решение.

Aidar
27.02.2017
16:05:44
Да вы сначала пишете

Потом делаете кучу штук

Потом читаете

Ясен пень значение могло поменятся

Ться*

Google
Quantum Harmonizer
27.02.2017
16:06:34
Это понятно, вопрос как правильно то?
Вот как работает, с захватом final, так и правильно.

Aidar
27.02.2017
16:06:36
Правильно как сейчас

Roman
27.02.2017
16:07:07
Есть какой то другой способ внутри функции использовать что то отличное от final ?

Aidar
27.02.2017
16:07:22
Что значит исполльзовать

Roman
27.02.2017
16:07:44
Присваивать или менять значение

Quantum Harmonizer
27.02.2017
16:07:56
Задача поставлена неверно. Примерно так же, как "есть ли способ сложить два числа, не используя + ?"

Aidar
27.02.2017
16:07:58
Bitmap что-то; Делаем что-то со что-то; final Bitmap buffer=что-то; ...

В этом чтоль проблема?

Roman
27.02.2017
16:10:09
Bitmap что-то; Делаем что-то со что-то; final Bitmap buffer=что-то; ...
Ну типа того. Если нужно 2 или 3 проверки сделать.

Quantum Harmonizer
27.02.2017
16:10:39
Ну типа того. Если нужно 2 или 3 проверки сделать.
Перед захватом всегда можно создать новую финальную переменную.

Admin
ERROR: S client not available

Aidar
27.02.2017
16:11:05
Если внутри анонимного объекта надо менять то тоже просто создаете в нем Bitmap AAA=buffer;

Quantum Harmonizer
27.02.2017
16:11:56
А вот если из анонимки нужно поменять значение локальной переменной... :)

Aidar
27.02.2017
16:12:12
Никак

Gleb
27.02.2017
16:12:18
У тебя шлепается по битмапу на картинку, эти битмапы иммутабельные, это правильно. Если ты хочешь изменямые битмапы с целью эфф исп-я памяти.. То см в сторону битмап пула. Есть примеры у гугла, реализация у глайда

Aidar
27.02.2017
16:12:35
В джаве нет передачи по ссылке

Quantum Harmonizer
27.02.2017
16:12:41
Никак
Ответ технически правильный, но решение всё же есть.

Aidar
27.02.2017
16:13:05
Я не знаю я плюсовик

Не джавист

Quantum Harmonizer
27.02.2017
16:13:29
Я не знаю я плюсовик
class ObjectRef<T> { T t; }

Google
Aidar
27.02.2017
16:13:43
Это все равно передача по значению указателя

И это не локальный объект

Он в куче

Quantum Harmonizer
27.02.2017
16:14:05
И это не локальный объект
В Java нет локальных объектов.

Aidar
27.02.2017
16:14:24
int, float

Сам указатель

Quantum Harmonizer
27.02.2017
16:14:31
int, float
это не объекты

Aidar
27.02.2017
16:14:39
У меня все объекты

Quantum Harmonizer
27.02.2017
16:14:52
Aidar
27.02.2017
16:14:53
Просто не объекты класса

Короче сам указатель поменяй мне так

Тебе нужно будет обернуть его в еще один

Roman
27.02.2017
16:18:48
final Bitmap bitmap1 = AAA; If (AAA == null) { final Bitmap bitmap2 = BBB; return bitmap2 } else { return bitmap1; } Вот так сработает?

Aidar
27.02.2017
16:19:43
А почему не просто return?

Gleb
27.02.2017
16:23:10
Это следующая задача, когда разберусь с этим. Кстати, glide или picasso?
конечно Глайд, рекомендован гуглом, эф исп-е памяти, анимированные gif и webp

Aidar
27.02.2017
16:23:24
Не понимаю зачем там final и что значет сработает

Quantum Harmonizer
27.02.2017
16:23:34
Roman
27.02.2017
16:24:04
final Bitmap bitmap; if (...) { bitmap = ...; } else { bitmap = ...; }
ну это же не компилируется

я с этого начал все :)

Aidar
27.02.2017
16:24:53
Просто Bitmap

Страница 1038 из 3205