Yakov
на рабочих устройствах нельзя кста
Не понял тебя, в андроид проблема в том что эмулятор не со 100% точностью чекают, его(эмулятор) можно настроить так что любое приложения будет считать его реальным устройством
Anonymous
тогда поговорим)
Anonymous
У них античит говно
да, но ведь на эмуляторе ещё никто не смог запустить за последнее время
You
Могли
Yakov
Все работало
Vadim
можно ли замокать Lifecycle?
Yakov
Может BlueStacks?
Да точно
Anonymous
попробуй сейчас запустить
You
попробуй сейчас запустить
Nox до недавнего времени работал, им лень бороться уже
Anonymous
ну они скорее всего натмвно как-то чекают
Anonymous
ну x86 это сразу
Yakov
да, но ведь на эмуляторе ещё никто не смог запустить за последнее время
Я в свое время находил пдф как правильно чекать что ты на эмуляторе, так вот если ставить все по жёсткому то есть вероятность блочить реальные устройства, если ослабить то тогда можно уже запустить в эмуляторе
You
ну они скорее всего натмвно как-то чекают
Да, но это не играет роли вообще
Yakov
Вот в иос все проще, isSimulator и все
Daniel
Привет, пытаюсь разобраться, что происходит при клике на иконку аппа в андроид. Поправьте пожалуйста 1. юзер кликает на иконку приложения в лаунчере 2. приложение-лаунчер обрабатывает клик и стартует explicit? Intent(Action.MAIN, Category.LAUNCHER) 3. android api обрататывает intent: находит приложение в списке по packageId (парсит манифесты всех доступных приложений), запускает процесс приложения с методом zigoteInit() и параметром - полным именем текущей активности 4. При запуске создаются классы Application и целевого Activity. При необходимости происходит JIT компиляция и подгрузка ресурсов
Daniel
Intent приложения в launcher выглядит примерно так
Daniel
Daniel
И так как этот intent имеет компонент, он explicit и не может быть перехвачен другим приложением - система откроет строго выбранное приложение, или если его нет, покажет алерт с ошибкой
Daniel
ИМХО, это потому, что package id должен быть уникальным для всех приложений и следовательно только один манифест сможет перехватить такой интент
Dmitriy
Как отключить offline mode ?
Daniel
В трее иконочка авиарежим и интернет
Daniel
Или кинуть интент (не знаю, есть ли такой в android sdk)
Dmitriy
Daniel
нажим 2 шифта и напиши offline mode в текстовом поиске
Daniel
Потом отключи вв диалоге
Daniel
Dmitriy
Это вроде для мавена, но я нашел хоткей через поиск для грядла
Daniel
Как отключить offline mode ?
Ты бы вопрос формулировал
Daniel
Как отключить offline mode для gradle в intellij idea, windows/mac
Daniel
Тебе бы сразу и ответили)
Александр
Я почему - то думал что он хочет научиться режим передачи данных из апки отрубать/подрубать. Нифига охеревший, подумал.
Anonymous
у всех android gradle 3.6.1 глючит?
Vladimir
у всех android gradle 3.6.1 глючит?
а что конкретно глючит? у меня вроде норм
Anonymous
Не собирает
Alexander
у всех android gradle 3.6.1 глючит?
Идею одну проблемку
Alexander
Но в целом вроде он норм пашет
Damir
Народ, подскажите плз, у меня есть Activity в ней Fragment, в этом фрагменте еще 3 фрагмента. И вот каждый из этих вложенных фрагментов грузит данные с сети и мне нужно показывать/скрывать прогресс бар. Сделал его общим в активити, но теперь не могу понять как им управлять? Или сделать для каждого свой прогресс, но тогда получается повоторения кода и не красиво. Или через SharedViewModel можно как-то замутить ??
Andy
Народ, подскажите плз, у меня есть Activity в ней Fragment, в этом фрагменте еще 3 фрагмента. И вот каждый из этих вложенных фрагментов грузит данные с сети и мне нужно показывать/скрывать прогресс бар. Сделал его общим в активити, но теперь не могу понять как им управлять? Или сделать для каждого свой прогресс, но тогда получается повоторения кода и не красиво. Или через SharedViewModel можно как-то замутить ??
сделай интерфейс для управления и реализуй его в активити, в которой этот Progressbar и в фрагментах делай так, то есть просто в onAttach достаешь контроллер и юзаешь где нужно, только в onDetach не забуть сделать = null private var mProgressBarController: ProgressBarController? = null override fun onAttach(context: Context) { super.onAttach(context) if (context is ProgressBarController){ mProgressBarController = context } } .... override fun onDetach() { super.onDetach() mProgressBarController = null }
Damir
Спасибо, а почему в onDetach() обнулять надо интерфейс ?
Andy
Что бы ссылка не оставалась на активити
Vitaly
Делаю что-то на подобии RecyclerView только для таблицы на основе TableLayout
Vitaly
Как можно добавить View сверху так, чтобы не было заметно скачков в скролле?
Kozimjon
может стоит вызвать notifyDatasetChanged()
Vladimir
Что бы ссылка не оставалась на активити
Ссылка на активити никаким образом не помешает фрагменту уничтожится.
Vladimir
А я говорил, что она помешает уничтожится?
Тогда в чем сакральный смысл занулять ссылки?
Dmitry
Подскажите, а как в фрагменте ресайклерВью создавать?
Andy
Тогда в чем сакральный смысл занулять ссылки?
Это будет утечка, если не занулить или я не прав?
Andy
Почему будет утечка?
Остается ссылка на активти
Andy
Чёт жоска, что мешает просто взять объявить публичный метод в Activity и во фрагменте написать (activity as? YourActivity).showProgressBar()?
А вдруг эта логика будет и в другой активти и один фрагмент может быть в 2х активити и тогда нужно менять код фрагмента на: (activity as? YourActivity1).showProgressBar() (activity as? YourActivity2).showProgressBar()
Vitaly
Почему будет утечка?
Утечка возникает тогда, когда дочерний элемент держит ссылку на родительский элемент, который живет должьше чем дочерний То есть в твоем случае Activity может жить на протяжении всего приложения (например), а фрагмент может уничтожаться и создаваться в зависимости от перехода пользователя между экаранми или относительно твоей логики
Александр
А вдруг эта логика будет и в другой активти и один фрагмент может быть в 2х активити и тогда нужно менять код фрагмента на: (activity as? YourActivity1).showProgressBar() (activity as? YourActivity2).showProgressBar()
Ну ёлки, эт чуть другой вопрос. Можно допилить мною предложенное. Если допустить, что баром могут управлять все Activity, то можно объявить интерфейс типо ProgressBarController с методами управления баром, реализовать его во всех Activity, и во фрагментах вызывать методы Activity - хоста как (activity as ProgressBarController).showProgressBar(). Хотя, зная себя, я бы бахнул общую абстрактную Activity и реализовал бы этот интерфейс там, и из фрагмента бы уже обращался как - нибудь типо (activity as BaseActivity).showProgressBar(). Или, имхо, чуть получше, пульнул бы в BaseActivity какую - нибудь progressBarliveData, и её бы из фрагментов мучил. Точнее, определил бы метод showProgress() в родительском абстрактном BaseFragment(да, люблю абстрактные классы, гоните меня, намехайтесь надо мной(( ), и его бы мучал ужо.
Andy
Ну ёлки, эт чуть другой вопрос. Можно допилить мною предложенное. Если допустить, что баром могут управлять все Activity, то можно объявить интерфейс типо ProgressBarController с методами управления баром, реализовать его во всех Activity, и во фрагментах вызывать методы Activity - хоста как (activity as ProgressBarController).showProgressBar(). Хотя, зная себя, я бы бахнул общую абстрактную Activity и реализовал бы этот интерфейс там, и из фрагмента бы уже обращался как - нибудь типо (activity as BaseActivity).showProgressBar(). Или, имхо, чуть получше, пульнул бы в BaseActivity какую - нибудь progressBarliveData, и её бы из фрагментов мучил. Точнее, определил бы метод showProgress() в родительском абстрактном BaseFragment(да, люблю абстрактные классы, гоните меня, намехайтесь надо мной(( ), и его бы мучал ужо.
Я тоже люблю абстрактные классы. Да, что то не подумал, что можно сделать: (activity as? ProgressBarController).showProgressBar() Тогда этот вариант по быстрее будет)
Кирилл
У viewpager2 уже можно ставить размеры в wrap content?
Vladimir
Остается ссылка на активти
Пока все равно не понимаю, где утечка?) Фрагмент уничтожится, активити уничтожилась, фрагмент пересоздался, новая ссылка на активити. Фрагмент retain, отцепился от активити, активити пересоздалась - фрагмент держит ссылку на новую активити.
Vitaly
Мне нужно сделать что-то на подобии RecyclerView через ScrollView, при добавленни в начало новой View фокус переходит на него и ScrollView пролистывается вверх Как сделать так, чтобы при добавлении новых View в начало списка scroll никуда не дергался?
Anna
Утечка возникает тогда, когда дочерний элемент держит ссылку на родительский элемент, который живет должьше чем дочерний То есть в твоем случае Activity может жить на протяжении всего приложения (например), а фрагмент может уничтожаться и создаваться в зависимости от перехода пользователя между экаранми или относительно твоей логики
Утечка возникает тогда, когда возникают циклические ссылки. Тут важно только это. Если объект ссылается на активити, но активити на него - нет, то все норм. Пугают ссылками на активити в первую очередь по другим причинам: а) статические поля, тут вообще амба; б) если сменится контекст (например новая активити открылась, то она утечет, пока объект существует). Мне кажется, людям сложнее донести проблему взаимных ссылок, нежели просто напугать и сказть "низзя!" 😊
Андрей
Дело в достижимости от gc root
Vitaly
Я вообще не про фрагмент и вью. Ну да ладно
Но все же само утверждение было некорректное (как мне показалось)
Anna
Пойду вкурю, возможно GC в Андроиде для меня пока тайна 😊
Anna
Но все же само утверждение было некорректное (как мне показалось)
Скажем так - стриггернуло. Работаю с несколькими языками. Больнее всего с языками с управлением памятью без сборщиков. strong, weak, unowned, shared и прочие указатели
Андрей
Пойду вкурю, возможно GC в Андроиде для меня пока тайна 😊
В смысле блин, такой же как в обычной жабе
Anna
В смысле блин, такой же как в обычной жабе
Тьфу. Джава, да. Ознакомилась на тему GC roots, спс. Так то гц есть и в шарпах, например, и в JS, не ругайтесь на меня плес )