Pavel
Всем привет!
Вопрос - кто-нибудь сталкивался с тем, что в Android Studio тулза Layout Inspector выдает ошибку - "Error obtaining view hierarchy: Unexpected error: empty view hierarchy"?
На экране, который пытаюсь просмотреть имеются: android.support.design.widget.CoordinatorLayout, внутри него - android.support.design.widget.AppBarLayout, после которого расположен RecyclerView.
В RecyclerView я во время загрузки экрана добавляю кучу элементов с не очень большой вложенностью.
Если заменить CoordinatorLayout на LinearLayout - все работает нормально.
Пробовал повторить на маленьком проекте - не получается воспроизвести. =/
Воспроизвел на маленьком примере. Понял, где накосячил. =)
1. Создаем обычный проект в Android Studio + добавляем в build.gradle зависимость от com.android.support:design:26.0.2 (версия, в принципе, не важна)
2. Внутри разметки главной activity создаем CoordinatorLayout, внутри него android.support.design.widget.AppBarLayout c id="@+id/my_app_bar", под appbar-ом - RecyclerView
3. В коде activity создаем адаптер для этого RecyclerView и заполняем его какими-нибудь простыми элементами
4. Добавляем к RecyclerView в разметке 3 атрибута - 1 нужный и еще 2, которые и приводят к описанной мною ошибке:
Нужный: (чтобы первый элемент recyclerView отобразился сразу appBar-ом, а не остался привязанным к верху экрана)
app:layout_behavior="@string/appbar_scrolling_view_behavior"
И два косячных: (не спрашивайте зачем, сам себя не понял)
app:layout_anchor="@id/my_app_bar"
app:layout_anchorGravity="bottom|start"
Та-даам, Layout Inspector сломан.
Pavel
Забавно, что если в recycler view элементов не будет, то Layout Inspector со скрипом, но запустится
Ilja
В Google Play появилась возможность запускать приложения без установки https://nplus1.ru/news/2017/10/20/instant-apps
Андрей
@iplab уже как пол года) только апекашки надо мелкие чтоб были, например у SO есть такая штука
Anonymous
Из коробки где есть возможность приобрести чистый Андроид, Google nexux 5x?
Anonymous
Грят его уже не выпускают, я не нашел
Anonymous
Из коробки есть возможность купить?
Anonymous
Ну 5х
Anonymous
На всяких авито за 10к брать неок
Anonymous
Так это уже из рук получается. Нужен новый, из коробки т.е
Kirill
Anonymous
Да, мне под задачи
Anonymous
Остальные андроиды от Гугл выше 20к
Kirill
ну новый нексус тяжело найти, а свежий андроид можно как кастом накатывать - народ портирует
ROMAN
Кто-то знает инструмент который позволяет получить сетевое время в приложении. Желательно не сторонняя библиотека, а каким-то нативным для андроид способом?
Igor
Ilja
Google заплатит за ошибки в приложениях для Android https://www.ferra.ru/ru/techlife/news/2017/10/20/google-google-play-security-reward/?from=rss
Anonymous
#Щедрый_гугол
Kirill
Igor
Особы высокая не нужна. 3с хватит с головой
Делаешь запрос на свой сервер,
- *1 сохраняешь время из хедера или боди
- *2 сохраняешь текущие SystemClock.elapsedRealtime() (это мс с момента загрузки с учетом времени во сне)
Потом можно вычислить реально время, не зависящее от изменения часов юзером через:
*1 + (SystemClock.elapsedRealtime() - *2)
ROMAN
ROMAN
Anonymous
Кто знает как кликнуть на вью так чтобы оно не поменяло состояние. К примеру кликнуть по свитчу но что бы он остался в прежнем положении а ивент произошел?
Nikita
Всем привет, гружу фотографии по их path'ам через Picasso - не пашет, через Glide все отлично.
Konstantin
Nikita
Picasso даже ерроров не кидает.
Anonymous
Denis
Nikita
Не кидает callback с Error, поэтому нельзя понять - в чем ошибка и почему глайд отлично работает.
Проблема в том, что все было написано на пикассо и сейчас делать везде глайд (из-за кэширования) немножко неохото :D
Sergey Mitrofanov
Не кидает callback с Error, поэтому нельзя понять - в чем ошибка и почему глайд отлично работает.
Проблема в том, что все было написано на пикассо и сейчас делать везде глайд (из-за кэширования) немножко неохото :D
Пикассо бывает теряет таргет, если на таргет нету прямой ссылки из вашего кода. Потому как пикассо на таргет хранит слабую ссылку. Но что удивительно мне, он теряет ее чуть ли не моментально (чего мне почему-то не удавалось достичь в коде, и все слабые ссылки оставались живы, и смиренно ждали его высочество ГЦ, чтобы он их прибрал, когда память начнет заканчиваться)
Это я к тому, что у вас, может, не сохраняется ссылка на таргет(имейджвью) для пикассо?
Nikita
Я нашел callback с error и тут такое
Nikita
java.lang.IllegalStateException: Unrecognized type of request: Request{/storage/emulated.....
Sergey Mitrofanov
Nikita
/storage/emulated/0/MySender/Images/IMG_20170714_100332.jpg
Sergey Mitrofanov
Сдается мне, не хватает у вас схемы )
Sergey Mitrofanov
ща в своем коде аналогичное найду, скажу точнее
Nikita
То есть обязательно file: ?
Alexey
Denis
есть норм либа для шедулинга задач, чтобы можно было по потокам разбивать и шедулить повторяющиеся задачи?
Nikita
Понимаю, что из коробки, но 3 дня и любой xiaomi превращается в сток андроид.
Nikita
Из коробки где есть возможность приобрести чистый Андроид, Google nexux 5x?
Sergey Mitrofanov
То есть обязательно file: ?
Посмотрел - вроде да, обязательно.
Хотя у меня прописано примерно так:
photo_file = new File(getActivity().getCacheDir(), "cache.jpg");
Picasso.with(getContext()).load(photo_file).into(mImageView);
Sergey Mitrofanov
То есть можешь ему тупо File скормить )
Nikita
Да, сейчас попробую :)
Sergey Mitrofanov
Хотя толку
Sergey Mitrofanov
В исходнике того метода все равно стоит
Uri.fromFile(file)
Sergey Mitrofanov
то есть да, схема обязательна
Sergey Mitrofanov
Просто если есть путь к файлу, то незачем создавать File, можно просто схему прилепить к пути )
А если File уже есть, то проще его и скормить )
Nikita
Все, заработало, спасибо!
Sergey Mitrofanov
А еще Firebase JobDispatcher 😉
Denis
Sergey Mitrofanov
А, про потоки проглядел )
Но он в рабочий поток дергает, вроде. А от туда можно запостить и в свой поток (например если он с лупером, то через хэндлер)
Но это уже на любителя - кому велосипед, а кому избавление от необходимости в еще одном фреймворке.
Хотя у него есть весомый плюс:
Он может выполнять задачи независимо от жизненного цикла апп (даже если процесс прибит)
А еще есть фильтры по условиям запуска джоба - только когда сеть есть и т.п.
Sergey Mitrofanov
Да, если использовать SimpleJobService, то он в рабочем потоке отработает свой колбэк, а если просто JobService, то с потоками надо самому решать...
Denis
походу android-priority-job-queue умеет
но с повтором заданий там костыль - надо по завершению задания запускать новое
Denis
>Он может выполнять задачи независимо от жизненного цикла апп (даже если процесс прибит)
это типа START_STICKY? в сервисе
Denis
он просто процесс перезапустит если он прибит и продолжит выполнение?
Sergey Mitrofanov
>Он может выполнять задачи независимо от жизненного цикла апп (даже если процесс прибит)
это типа START_STICKY? в сервисе
Да, только прикол в том, что в нуге START_STICKY уже не работает )
Или точнее работает не так. Или это с печеньки началось...
Но суть в том, что вечно живущих сервисов в андроиде считай что больше нету - доз рубит всех.
Мы раньше тоже использовали START_STICKY, но этим летом перешли на джобы, потому что сервис просто не выживает на последних версиях андроида не смотря ни на какие флаги - частично как запланировал гугл, частично из-за багов самого гугла в этой части функционала. Впрочем, не думаю, что они эти баги пофиксят, потому как они совпадают с их вектором движения в этом плане )
Sergey Mitrofanov
Sergey Mitrofanov
Если процесс запущен, то сработает в нем, если нет, то запустит его
Denis
Sergey Mitrofanov
И с форграундами тоже беда
Sergey Mitrofanov
Народ уже жаловался, что даже форграунд от доза не спасает
Denis
вообще START_STICKY и раньше хреновенько работал - мог через 30 минут перезапуститься
Denis
а если в whitelist добавить вручную, то спасёт?
Sergey Mitrofanov
В частности разработчики аудиоплееров были очень недовольны, что даже с форграундом после выключения экрана музка перестает игра спустя какое-то время
Sergey Mitrofanov
а если в whitelist добавить вручную, то спасёт?
К сожалению нет - это такой баг. И они его вроде еще не починили. А даже если и починят, то в следующей минорной версии, и будет набор версий ходить по рынку, в которых даже форграунд дозом стопориться. Примерно как было с киткатом и START_STICKY
Denis
Denis
или есть 100% спасение от доза на новых версиях?
Denis
я думал это как раз форграунд сервисы
Sergey Mitrofanov
получается если в ТЗ явно указано что должен быть реалтаймовый сервис
то лучше закупить девайсы на 5.1?
Насчет конкретных версий лучше погуглите, у меня ссылки на это не сохранилось. Но вроде 6-ой тоже нормально работал, а вот 7-ой запорол.
Но на счет ТЗ имеет смысл исходить из задачи - для чего вам вечный сервис?
Если нужно время от времени выполнять какой-то джоб, то есть JobDispatcher
Если надо висеть и ждать пуша, то с новыми версиями это только через ГЦМ. Он один может будить из доза и пр.
А вообще андроид начал движение в сторону экономии батареи, и потому придумал доз и мягкий доз.
Тут надо немного парадигму сдвинуть, и принять как факт, что в доз телефон переходит через час когда он лежит неподвижно. То есть если пользователю действительно все равно. И первое окно для действий апп получает через 1 час после начала доза. Второе через 2, третье через 4, далее через 6 и т.д. по 6
Суть в том, что не нужно жрать батарейку, пока пользователь положил телефон в тумбочку.
Если пользователь все время носит телефон с собой, то у него доз может включиться только ночью )
А до тех пор будет время от времени возникать мягкий доз (начиная с 7 андроида) - он не такой "злой" и окошки дает довольно часто...
Sergey Mitrofanov
Рекомендую погуглить по этой теме - очень много полезного узнаете
Denis
Насчет конкретных версий лучше погуглите, у меня ссылки на это не сохранилось. Но вроде 6-ой тоже нормально работал, а вот 7-ой запорол.
Но на счет ТЗ имеет смысл исходить из задачи - для чего вам вечный сервис?
Если нужно время от времени выполнять какой-то джоб, то есть JobDispatcher
Если надо висеть и ждать пуша, то с новыми версиями это только через ГЦМ. Он один может будить из доза и пр.
А вообще андроид начал движение в сторону экономии батареи, и потому придумал доз и мягкий доз.
Тут надо немного парадигму сдвинуть, и принять как факт, что в доз телефон переходит через час когда он лежит неподвижно. То есть если пользователю действительно все равно. И первое окно для действий апп получает через 1 час после начала доза. Второе через 2, третье через 4, далее через 6 и т.д. по 6
Суть в том, что не нужно жрать батарейку, пока пользователь положил телефон в тумбочку.
Если пользователь все время носит телефон с собой, то у него доз может включиться только ночью )
А до тех пор будет время от времени возникать мягкий доз (начиная с 7 андроида) - он не такой "злой" и окошки дает довольно часто...
хотят трекать корпоративных юзеров (сбор gps + отправка на сервер)
но они сами в курсе и запускают сервис тоже сами
ну судя по вашему описанию, не все так страшно
поскольку если в неподвижном состоянии, то пусть спит сколько хочет
JobDispatcher от гугла не совсем подходит потому что min api 15
вот выбираю девайс (5.1 морально устарел, в 6 есть баг с фг-сервисами и дозом, в 7 доз стал жёстче)
и либу (priority job queue / firebase job dispatcher / hypertrack smart scheduler / evernote job)
Sergey Mitrofanov
Немного не верно: в 7-м доз такой же как в 6-м. Просто добавился "мягкий" доз, который еще больше экономит батарейку, когда экран выключен )
у 6-го либо доз, либо не-доз, а у 7-го - не-доз -> магкий-доз -> доз
Sergey Mitrofanov
Но если дело только в трекинге, то Firebase JobDispatcher, думаю, вполне подойдет. Нужно только определиться с временным интервалом - как часто собирать инфу о местоположении?
Работает начиная с min api 9
Denis
там ещё синк с сервером, но тут не требуется работа в дозе
Sergey Mitrofanov
Если девайс до api 21, то необзодимо наличие установленного Google Play
Denis
есть преимущества по сравнению с priority job queue?
наверняка вы когда выбирали, рассматривали и её
у priority job queue многопоточность хорошо сделана