Коротко о главном: 1) Мобильная разработка - это весело. 2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом. Ждем релиза второй версии студии со всеми плюшками.
А также о неглавном: 3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript легион, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная, также как и количество вакансий. 4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный, и работа есть. 5) RoboVM - идейный наследник ксамарина, а теперь уже и его часть но на Java. Менее популярен, так как моложе, и вакансий я не видел.
Отдельного упоминания стоят: 1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу: Интернет-ресурсы 1) http://developer.android.com/index.html Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта. 2) http://stackoverflow.com/ Пользуюсь чаще чем первым сайтом. Можно найти практически все. 3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже. http://startandroid.ru/ и http://developer.alexanderklimov.ru/android/ Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить. 4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять. 5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну 1) The Busy Coder’s Guide to Android Development
А теперь, так как заебали уже всех, гайд для: >"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com. Можно Эккеля "Философия java" почитать. Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе. Энтри лвл. 1) ООП - сам принцип нужно именно понять, так как ооп язык. 2) Типы данных. Примитивы и ссылочные. 3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности. 4) Дженерик типы, они как раз юзаются в коллекциях. 5) Классы/интерфейсы и все вытекающие. Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше 6) Потоки ввода/вывода (streams). Не путать с тредами(threads). 7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable. 8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной. Уже сделаешь что-то нормальное.
Дальше. 9) Работа с Sqlite, нужна будет в любом случае. 10) Работа с json. Привет клиент-серверка.
>>665510 (OP) ОсвятилKotlin - язык 2011 года разработки, 100% совместимый (в обе стороны) с Java Текущая версия: 1.0 Разработчики: JetBrains (создатели IDEA, на базе которой сделана Android Studio) Полная поддержка в: Android Studio / IDEA / RoboVM Studio / Eclipse / Gradle / Maven Сайт: https://kotlinlang.org , http://try.kotlinlang.org
Из коробки поддерживает: • Проперти. Также ко всем Java set/get методам можно обращаться как к свойствам; • Лямбды. Вызываются они в виде lamba1(...), а не как "функциональный интерфейс" lambda1.call(...); В Java методы (где требуются ФИ) можно передавать kotlin-лямбды; • Экстеншен методы (как в C#). К любому (даже final) классу можно добавлять сторонние методы которые будут доступны через точку; • Перегрузку операторов (+,- и тд). К примеру можно два BigDecimal складывать через +, а не метод add(...); • Поддержка неизменяемых коллекций и объектов на уровне компилятора; • Non-nullable типы, те прощай NullPointerException; • НЕТ checked исключений (как они всех заебывают внутри лямбд);
В общем похож на Scala, но проще и всего +400kb к размеру APK (с proguard будет меньше). RoboVM + Kotlin - отличная замена Xamarin
>Пост 1. Анон, требуется помощь. Есть активити, унаследованное от FragmentActivity. В нем один viewpager, и ScreenSlidePagerAdapter, в которому в методе getItem() в зависимости от int аргумента страницы возвращается новый Фрагмент. Лэй-аут фрагмента одинаков для всех 7 страниц - два текствью и радиогруп с 3 кнопками. Текст для текствью берется из string-arrays в strings.xml. Вопрос - как правильно организовать отображение текста, правильную отрисовку - и правильной контроль за сбором данных с кнопок? Я пробовал в самом фрагменте определять страницу, и в зависимости от нее выводить текст. Но оно постоянно выводит первый элемент з массива, как бы я не вказал - или там 4 элемент, или 3. Хелп.
>Пост 3 Вызываю помощь зала опять. Проблему вылетов решил, но вот такая беда. На каждую из 3 радиокнопок подается текст из массивов строк в strings.xml, при том в каждом массиве по 3 элемента (по одному массиву на страницу) . Вопрос в чем - на все 6 страниц в радиокнопках текст последнего массива, при том я в логах вывожу вместимое массива, и там всё ок - текст разный.
>Пост 4 Объясню попроще ситуацию: есть некоторый класс, которому в конструкторе передается некое число. Обьект этого класса создается в фрагменте. От этого числа зависит то, какой массив строк из ресурсов передастся. Выборка происходит еще на этапе конструктора. Вот в чем недопонимание - в конструкторе оно выбирает верный массив, но метод этого класса возвращает всегда один и тот же массив.
Краткое описание: 1) Ты в специальном формате описываешь пересылаемые данные. 2) Тебе генерируется классы + код серелизации/десерелиазиции на любом языке (java/c/c# и тд)
>>665638 Пол треда обсуждаем как бороться с ссаными жизненными циклами и сремся про то, какую орм/бд использовать. В иосе таких проблем просто не возникает.
>>665631 Да как же так, неужели весь хайлод сводится, так вот здесь сбалансируем купим еще сервачков и будет нормас? Столько-то трафика можно сэкономить и клиентам и самому себе. >>665638 Ну я вот с маком, но прогаю под ведроид? У меня сложилось впечатление что iOS ники сильно жадные, то есть сидят два как фуфелы и ни чо не обсуждают. И еще оба велосипеды пилят блять, вам дали гитхаб жрите - нет напишем очередно [*NSSHITLER_HUI_PIZDA....]
>>665643 Вот да, этим и занимаемся, вам бля дали MVC жрите не поперхнитесь. Вам даже не нужно ебаться с китайскими девайсами и васяно прошивками, и версиями ОС которым больше 3 лет. Иногда пичот.
>>665638 Сам удивляюсь, хоть и пишу на маке в основном под Kotlin, но с удовольствием бы потер за Swift. К сожалению в iOS треде тоже большинство аутиство, до сих пор разрабатывающих на Object-C.
Есть обьект А (activity) который использует обьект Б. Обьект Б имеет ссылку на обьект А через интерфейс, листенер типа. ( b.setListener(this) ). В какой-то момент внутри обьекта А, обьект Б обнуляется (b = null).
Протечет ли обьект А? Нужно ли обнулить листенер, ссылку внутри Б на А, ( b.setListener(null) ) перед обнулением самого Б?
>>665654 > Протечет ли обьект А? Ну хуй знает, я не помню, GC ходит восходяще или нисходяще до рута. Так что ориентируемся на то, что протечет, поскольку В удерживает ссылку на А. > Нужно ли обнулить листенер, ссылку внутри Б на А, ( b.setListener(null) ) перед обнулением самого Б? Ну если ты уверен, что ссылок на Б больше нет, то не нужно.
Тебе надо в A.onDestory делать всего то b.setListener(null)
>>665652 Да нихуя не весело, я уже заебался с этими циклами.
>>665651 >до сих пор разрабатывающих на Object-C. Ты охуел? что с ним не так? Плюс РЫНОК требует, а не сырой свифт, где блядь баг на баге с колбеками даже
>>665677 На Android если приложение сдохнет, то потом запустится с предыдущего окна и поведение из коробки.
На iOS если приложение кикнет система, то оно запуститься с самого начала. А если хочешь, что бы история экранов восстановилась, придется сильно заморочиться.
>>665681 Ты мудак? никто не говорил что умрет, ебало завали, то ты говоришь что свифт умирает, обджектив ка кбыл так и останется, но на свифт все чаще и чаще переписывается отнюдь не меликим конторами и он не сырая хуйня.
к чему ты кресты приплел вообще не понятно, дегенерат ебаный, типичный джаводебилоид.
>>665510 (OP) Хелп.Объясню ситуацию: есть некоторый класс, которому в конструкторе передается некое число. Обьект этого класса создается в фрагменте. От этого числа зависит то, какой массив строк из ресурсов передастся. Выборка происходит еще на этапе конструктора. Вот в чем недопонимание - в конструкторе оно выбирает верный массив, но метод этого класса возвращает всегда один и тот же массив.
>>665710 Я хз кто вы и о чем спорите. Хватит срать на джаву и ведро, сириусли. Я сейчас зайду в ваш гейосный тред и начну вайнить что вы там дибилы и работаете на говноподелках для даунов. А у нас тут чистый опенсорс и тд.
>>665814 Я добавил твои посты под шапкой, будь внимателен.
Ананасы, что сейчас нужно, чтобы вкатиться Android джуном или стажером? Обязательно ли в плей-маркет что-то выкладывать? (это же 25$ и не факт что после этого работать куда-то возьмут). Какого уровня должны быть готовые приложения? Или даже готовые не обязательно иметь? Допустим, запилить какой-нить очередной плеер для музяки или мессенджер для впараши. Такое пойдет?
>>665887 Для стажера хват и торрет-стримера для Android TV, написанного на Kotlin + JNI (в 2016 начинать новые проекты на Java считается мувитоном). Конечно должно быть >5k скачиваний и рейтинг >4, иначе даже смотреть не будут.
Сорцы не забудь выложить на github что было сделать ревью кода.
>>666112 Чувак, я скоро начну тебя репортить. Всем похуй на котлин, ладно если бы они на ведре пилили в этом видео. Так нет. Давай может попиздуешь с котлинотред тред? А то по тематике не подходит.
>>666115 Мелка ты еба, видео еще не вышло, а ты уже вангуешь что там будет. На хабре уже давно поняли что Kotlin == будущее Android одни вы аутисты копротивляетесь
>>666145 Потому что нету настолько форсированного выката. Если свифт создали для замены обжектив и целенаправленно кормили, то котлин получился удобным для замены джавы на ведре, и только несколько месяцев как идет хайп, но учитывая что стандарт задает гугл с джавой, то сразу становится понятно почему котлин не будет иметь отлика еще некоторое время.
Также интересно как там с опенсорсом в котлине? Или мы будем смотреть суды гугла и джетбреинса, если они все же решат?
Анон, вопрос про support library. Если поставлю эту штуку то смогу, к примеру, на api 15 использовать все фишки более новых версий или есть ограничения?
>>666168 Это гугли специально так делают, чтобы переходили на новые версии или некоторые штуки принципиально невозможно было реализовать на старом апи?
>>666181 Да хуй их знает, это не проблема, есть куча материал вьюх с гитхаба. Просто сам факт, сейчас гугл просто представляет нам велосипеды, которые на гитхабе лежат уже несколько лет.
>>666156 Слышал звон, не знаешь где он? Спор не из-за джавы как таковой, а из-за некоторых ее нешвабодных компонентов. Те же нешвабодные компоненты будут заюзаны и с использованием котлина ибо он идет без собственной жвм. Сам же гугл потихоньку идет к го.
>>666195 > Спор из-за лицензии джавы и не пизди тут. Из-за какой лицензии, дебик. Гуглы спиздили куски реализации запатентованной части JDK. С переходом на openJDK проблемы исчезнут. > Го это что-то уровня ндк, спасибо не нужно. Без удобных инстурментов разработки конечно не нужно, но сам понимаешь, что списочки на нативной реализации с меньшей вероятностью будут лагать, чем на jvm.
>>666205 1) Миллионы строк Android API написаны на Java, 2) Миллионы приложений в продакшене написаны на Java 3) 99% девайсов никогда не обновятся даже до 6.0
> списочки на нативной реализации с меньшей вероятностью будут лагать А ну тогда нахрен все переписываем. Проще новую OS сделать
>>666215 И разработчики будет делать две версии: 1) на Go для Android 2099 2) на Java Kotlin для всех остальных Фигли ты к первым двум пунктам не придрался, их уже достаточно.
>>666205 >Из-за какой лицензии, дебик. Гуглы спиздили куски реализации запатентованной части JDK. С переходом на openJDK проблемы исчезнут. Иди почитай про апач гармони рахит.
Есть ли тут абсолютные новички желающие вкатиться? Было бы неплохо скооперироваться и начать ебашить, перманентно подгоняя друг друга и просматривать ошибки друг у друга. Пока ковыряю жаву на уровне Pet myPet = new Pet();
>>666510 Вангую что студия, до этого сам клепал проги в эклипсе, все было шустро. Когда поставил студию все блать собираеся в лучшем случае 30 сек, это притом что я поставил в опциях offline для градла и сборка в фоне, как присоветовали на стековерфлов. До этого вообще пару минут заводилось. Не спорю, студия кошерна, но блядь в эклипсе все работало моментально.
А еще приходилось ставить виртуалку с линухой, и я поставил туда студию, на виртуалке ресурсы были порезаны вдвое, в результате студия на виртуалке работала быстрее. Так что сам видовс говно.
А эклипс конечно быстрее, ты еще в блокноте пиши будет еще быстрее.
>>666614 >А еще приходилось ставить виртуалку с линухой, и я поставил туда студию, на виртуалке ресурсы были порезаны вдвое, в результате студия на виртуалке работала быстрее. Так что сам видовс говно.
Сделал так же - тормозит еще сильнее. >А эклипс конечно быстрее, ты еще в блокноте пиши будет еще быстрее. Кроме студии стоит идеа коммьюнити и ультимэйт, даже проекты с кучей либ и сотней классов собиратьются быстрее.
>>666844 >Сделал так же - тормозит еще сильнее. Какой проц, и ты точно правильно виртуалку настроил? У меня ускорился даже сам запуск студии.
>Кроме студии стоит идеа коммьюнити и ультимэйт, даже проекты с кучей либ и сотней классов собиратьются быстрее. Ну тут уже к градлу притензии. Ты там тоже градл юзаешь?
Есть тут кто пишет на DroidScript? Есть ли там встроенная функция будильника? Если нет, то как заставить вибрировать и воспроизводить звук, в состоянии выключенного экрана? Хочу себе будильник хитрый написать, что бы просыпался вовремя.
>>667105 Да проц норм, i5 3210m, памяти хватает, винт не ссд, но шустрый(7200об), вангую что именно из-за градла, но разве его меняют на другие сборщики? >и ты точно правильно виртуалку настроил? Отдал половину ресов, уебунта работает без лагов, студия все так же тупит
>>667163 Да какой нафиг ссд, я писал что огромные проекты собираются в идее за гораздо меньшее время чем примитивные хелловорды в студии на пару мегабайт. Тут может реально с реализацией на винде накосячили если у анона на прыщах летает и на маках(которые в душе линь).
>>667182 А эти проекты тоже был на gradle? Он сам по себе отдельный процесс сборки в нем нет супер оптимизаций из IDEA. Для него как-раз важнее быстрый жесткий диск.
Для тестов можешь сделать диск в памяти, создать там проект и потестить скорость сборки.
Сижу на mac mini 2012 i7 под прыщами; поставил 16 Gb ram, но SSD не могу, там нужно его сильно разбирать, а у меня нет таких редких отверток. Тогда, чтобы никогда не свопилось после подгрузки всего в память и дисковые кэши поставил, по-мойму, так: sys.vm.swappiness=10 (прыщеблядикс будет начинать скидывать страницы на диск только когда 100-10=90% физической памяти будет занято)
У меня прошка 15" 13-го года, у второго разработчика эйр 15-го года, я бы не сказал что у него собирается медленнее чем у меня, хотя у него 4 гига, а у меня 8. Вся соль в ссд.
Что-то печет мне от пермишенов, почему не сделали так что бы можно было хотя бы в бандл засунуть актуальные данные, что бы сразу из onPermissionGranted продолжать где остановились, а так приходится ебаланькатся - сохранять в SharedPreference, потом вытаскивать оттуда. Какие бест практисы?
>>667457 Хуяк. ОС отжирает 1.5гб, хром на 500 минимум, студия жрет 1.5 + градл еще гигабайт. Что-то не сходится в итоге. >>667509 Что у тебя актуальные данные?
>>667509 0) Пользователь запрашивает функционал для которого нужен runtime-пермишен 1) Вручную чекаешь checkSelfPermission(...) 2) Если разрешено, то все ОК 3) Если не разрешено, то показываешь: 3.1) Тост с объяснением (это не обязательно) 3.2) Диалог запроса requestPermissions(...) 4) Забиваешь хуй на результат. Если пользователю надо, он еще раз сделает пункт (0)
>>667511 Ну вот представь есть 3 социальных кнопки логина, которые при успешном использовании вызовут метод аутиентификации с названием социалки и токеном. И хотелось бы в одном месте получив эти две несчастные строчки перед вызовом охраняемых методов чекнуть и после чека продолжить, но хуй там. А так приходится делать метод проксю, который полезет в переференсы (или еще куда-то), восстановит эти данные и продолжит свое черное дело. >>667516 Ну это как-то по пидарски. >>667511 Ну у него в пике выходят все 4 гига, но он не держит одновременно скетч, хром, эмулятор и студию. При сборке эмулятор и студия. Если на телефоне, то без эмулятора и с хромом например. А у меня с эмулятором, студией, хромом (щас сижду на сафари, меньше расход), скетчем и еще хуй знает чем (видимо genymotion срал с virtualbox'ом на пару, благо у второй студии эмулятор шустренький) выходило в пике 7 гигов.
>>667521 Чет ты хуйню намутил, ты тогда должен в бандл сохранять эти токены в onSaveInstance и восстанавливать их в onRestoreInstance. OnPermissionGranted - обертка над активитирезультом.
>>667532 Вот щас обидно было, думаешь я не читал? >>667531 Ага, так и думал, то есть теоретически я могу выцепить данные в onCreate'e? Ну ладно, от двух полей активити не загнется.
>>667536 А вот для сравнения iOS код сохранения картинки в галерею пользователя. При его вызове тоже показывается диалог "разрешения доступа к галереи". Вот только мне не надо по всему контроллеру раскидывать код для обработки результата.
>>667547 Анон, мы уже поняли, что айос лучше. Тут одни нищеброды, которые не могут позволить себе макбук, либо говноеды, которым в кайф жрать говно. Когда мы чуть поднакопим денег/образумимся - безусловно, перейдём на самую лучшую мобильную ОС, и этого треда вообще не будет. А пока съеби плиз, тут тред ведроида.
Фрагменты-друг-на-друге-после-выхода-из-фона-приложения-кун вернулся. replace творит ересь и работает из рук вон плохо. Пока придерживаюсь hide/show и пересоздания аппликухи с восстановлением всего что там было через sharedPreferences
>>667626 Нашел косяк. Короче, там onDestroy триггерится через определенное время работы в бэкграунде. Щас чекну за onCreate после перехода после onDestroy-а. Чертов LifeCycle
Да, чекнул, onCreate идет после нового перехода. Бегу обрабатывать такую фигню, хотя идей чет маловато. С какой бы стати в onCreate fragmentTransaction что-то содержать должна. Вроде как все по новой должно пойти с дефолтных значений.
>>667791 Это все потому что надо было отдельные окна в отдельные активити рассовать. А не как этот "вундеркинд" >>665154не ты ли? советовал в одно активити все запихивать.
>>667547 Мне стыдно за ведроид, почему гугл просто не перепишет это все? Ну выпускайте аппкомпат, но дайте возможность хоть под новые устройства писать как люди.
Короче решил я тут во второй раз попытаться вкатиться в андроид из тырпрайза. Жабу знаю, как выяснилось на собесе, на 3/5, что в общем неплохо. В первый раз изучения андроид заебался разбираться с активити, фрагментами, еще как-то хуйней. В общем вопрос то в чем, а вопрос в том, есть ли вменяемые гайды по всему этому делу, именно по андроидным фишкам, смотрел лекции e-legion – сначала казалось годнота, но хотелось бы буковки почитать, можно и на инглише. Да, и еще чтоб с примерами было. http://startandroid.ru/ru/ - это видел, 170 уроков ебал я, слишком муторно.
>>668387 Во-первых нахуя, приложения клепают - клепают, значит всем норм. Во-вторых это не хуй собачий. В-третьих с пермишенами все было-бы просто если бы они не вынесли это в отдельную активити, а как-нибудь через контекстик, как с пермишенами для uri.
Всем привет. Сделал приложение, gps-трекер на гуглокартах, всё работает, не крашится, однако есть один баг. Когда запускаешь слежку (пояляется стандартный нотификейшн об отслеживании), сворачиваешь приложение, начинаешь работать с другими приложениями, потом открываешь приложение заново, есть шанс, что текущая активити покрашится. Я бы это списал на стандартное уничтожение процесса, но проблема в том, что нотификейшн отслеживания локации сверху остаётся, при этом однозначно указывает на моё приложение в качестве источника запроса. Соответственно, если я пытаюсь убить процесс через андроид студию, например, то этот нотификейшн сразу исчезает. Делаю вывод, что процесс не уничтожается. Вопрос: как это дебажить? Может, есть какие-нибудь программы, заполняющие RAM? И в чём вообще может быть проблема? Слежка идёт в отдельном синглтоновом классе и через коллбэки кидается в активити. значит, если бы активити уничтожалась сборщиком, то коллбэки бы давали нулл поинтер эксепшн. Но, с другой стороны, когда происходит эта ошибка, загружается пустая активити, не получающая никаких коллбэков. Значит, коллбэки идут куда-то в ебеня. Есть идеи?
>>668706 >потом открываешь приложение заново,есть шанс, что текущая активити покрашится Не так. Когда открываешь приложение заново, загружается пустая активити, как будто приложение только что запустили, а не продолжили работу. При этом отслеживание локации не прекращается.
>>668745 По нажатию кнопки регистрирую и отписываюсь. Кнопка нажимается во фрагменте, из которого идёт вызов на работу/останов в написанный мной синглтон-класс MapHelper, который и взаимодействует с ГуглЛокэйшн.
>>668801 Это ненужное говно, ищи в них краш. >>668746 > из которого идёт вызов на работу/останов Это как? Делаешь реквест апдейт и сразу отписываешься? > синглтон-класс MapHelper Возможно он еще обновляет в фоне, поскольку висит в статике.
>>668814>>668706 Вот, нарисовал архитектуру. >Делаешь реквест апдейт и сразу отписываешься? Нет. Нажал кнопку старт - реквестапдейт, нажал стоп - отписался. >Возможно он еще обновляет в фоне И куда он обновляет? Куда отправляются коллбэки с локациями, которые должны отправиться в активити? Если она уничтожена, то почему нет нуллпоинтера при попытке отправки коллбэков, а если не уничтожена, то почему она не показывается?
>>668827 Ну так разбирайся, лол. Курс на удасити пройди. Недавно проходил курс по грэдл у них, понравилось, объясняют, как для долбоёба. Хотя, конечно, дают только базис, чтоб ты потом сам уже мог изучать.
Кстати, про коллбэки. Пасаны, а какие есть альтернативы пикрилейтеду? >>668833 Так блин, а какой ты помощи хочешь? Я тебе сказал - смотри логкэт, там ошибки пишутся. Сделай крэш и не нажимая ОК смотри, что написалось в логкэт.
>>668838 Как минимум не использовать фрагменты, где можно обойтись отдельной активити. А события с локации можно спокойно вынести в сервис и отдавать бродкастами.
>>668842 >можно спокойно вынести в сервис и отдавать бродкастами вахуе, куда я вообще полез........... >>668838 так я скинул логкэт что бы подсказали. не знаю что такое крэш, похуй, спать пойду
>>668842 >А события с локации можно спокойно вынести в сервис и отдавать бродкастами А ты вообще сможешь кастомный класс (Location, хотя бы) в бродкасте передать? И если да, то как?
>>668846 Ну хуй знает. Просто заменили три строчки коллбэка на пятнадцать строчек бродкаста, ещё и с нисходящим преобразованием, в итоге просто дифференциировав типы обращения к активити. Но зато сервис надёжнее в целом. Я чёт просто, когда делал архитектуру, тоже думал сервис запилить, а потом подумал - в Гугл Локэйшн тоже сервис наверняка используется, так зачем делать сервис в сервисе? И сделал через коллбэки. Однако, вопрос, почему иногда активити проёбывается, остался для меня нерешённым. Сейчас думаю сериализовать текущие записанные локации и в случае чего подгружать его при перезагрузке, но это а) не решение проблемы (как бы странные вызовы локации непонятно от кого и непонятно куда останутся) б) будет хуёво работать вследствие особенности логики моего приложения
двач ,помагай,пишу я значит одну йобо-прогу и вроде как всё правильно,компилирую и тут вот такая вот параша http://pastebin.com/HJnABu5n я хз чё это,давайте антоши помайте
>>669005 Как будто отдельный класс с асинктаском будет иметь какую-то отличную структуру. Только вместо интента на сервис будет стоять создание экземпляра класса.
>>669020 Ну да, я так и делаю. Только, на самом деле, никогда не сталкивался с проблемой, чтоб что-то пошло не так, если был передан контекст активити, которая потом умрёт. Что там будет, memory leak без краша?
Как сделать вкладки, содержимое которых - фрагменты, так, чтобы при переключении от вкладки к вкладке фрагменты НЕ уничтожались? У меня например в одной вкладке находится карта google maps, очень не удобно искать свое местоположение после того, как переключился на соседнюю вкладку. Можно конечно запомнить последнее местоположение и после получения координат перейти к нему, но ведь можно просто не уничтожать фрагмент.
В идеале - не уничтожать фрагмент при переключении к другой вкладке, но вызывать у него метод pause, чтобы притушить движуху, пока пользователь на него не смотрит.
>>669111 > Можно конечно запомнить последнее местоположение и после получения координат перейти к нему Нужно > но ведь можно просто не уничтожать фрагмент Нельзя, всякое ссанье, у которого на приложение выделяется по 15 мб начнет загибаться.
Есть во первых fragmentstatepageradapter, во вторых у него есть параметр, как раз отвечающий за кол-во фрагментов в памяти, но я не помню какой.
>>669125 > но я не помню какой setOffscreenPageLimit(int limit) > Используется совместно с ViewPager? Да, а ты же так вкладки делаешь? > Можно ли отключить скролл пальцами у ViewPager? Вероятней всего можно.
Сап, ананасы. Не подскажете, есть ли какие-либо способы заставить SupportMapFragment ( или как там у гугла карто-кусок звать ) жрать меньше оперативы ? И второй вопрос: Какой верхний порог по скушиваемой оперативе вы бы выделили, выше которого ни одной аппликухе лезть не положено ( игры не берем в счет ) ?
Вопрос платина, шапку читал. Действительно ли javarush даст мне понятие по всем темам которые мне нужны для успешного выкатывания из идиота с попутным перекатыванием в программиста (в данном случае андроид дева)? Или же все же лучше книгу?
Хотел стать андроид разработчиком, но денег не хватит чтобы куда-то понаехать и найти работу джуниора/стажировку. Знания джава и андроид начальные: пару курсов на курсере, могу сделать laba1, но никогда не делал сложных проектов. Реально ли угореть дома по андроиду до уровня фриланса и поднять денег на перекат? В противном случае придётся искать фриланс связанный с вебом, или работать где-то ещё, чего не очень хочется.
>>669225 самый хуёвый вариант, никогда так не делайте. Сам так делал, были знания только плюсов, и то получалась польная хуйня, которую даже на гитхаб стыдно выложить.
>>669282 в смысле невнимательно? не зная кора ты будешь копировать код, что-то менять, но не понимать, что происходит, только в общих чертах. Да визитки можно сделать, но не больше. И джуном так точно не устроиться.
Слышал, что в Android 6.0 разрешения будут запрашиваться во время работы приложения. Это вообще обязательно? Смотрю в моем старом приложении все разрешения сразу включены после установки приложения.
>>669602 Днище что то, что это. Под андроид приятней писать на котлине. Под иос ты еще должен быть ололодизайниром, потому что вот эту кнопочку на миллиметр вправо сдвинь. Еще сервисы гугла намного лучше эпловых работают.
>>669610 > Слышал, что в Android 6.0 разрешения будут запрашиваться во время работы приложения. А ты быстрый. > Это вообще обязательно? Желательно, иначе неопределенное поведение. > Смотрю в моем старом приложении все разрешения сразу включены после установки приложения. Да, при targetSdk < 23. Но я могу их отключить, и тогда краш либо пустые данные.
>>669614 > Под иос ты еще должен быть ололодизайниром, потому что вот эту кнопочку на миллиметр вправо сдвинь. И? Как будто под андроид нет понятия pixel perfect. >>669616 > в контакты Гугллогин требует пермишн контактов. > сеть Без отдельного пермишина.
>>669952 p.s. если у вас получится собрать так, что крашиться не будет аппка и вы скажете, что я не так делаю(хотя делаю вроде все так), с меня соточка на пивко :)
>>665510 (OP) Анан, а подскажи - как в мессенджерах типа вотсаппа реализована мнгновенная (мнгновенная, Карл!) передача сообщения между клиентами, а точнее push-уведомление о том, что сообщение пришло, когда приложение киснет в бэкграунде уже хрен знает сколько времени? Сервисы? Ясен пень сервисы, но как именно клиент получаетсамо уведомление? Что это - открытые порты и прямое соединение (которое еще и реконнектить надо, когда сервис перезагружается), проверка клиентом по таймеру наличия новых сообщений, long-polling запросы или же какая-то неведомая йоба-технология? Анан, дай советов мудрых, будь няшей. Бест практисез какие-нибудь там, или чего еще - гугл молчит как молдавский партизан и кроме невнятных догадок ничего не говорит.
>>670262 Зарплату не нашел. С Эккеля проиграл, они бы еще вопросы по предисловию задавали. >>670408 long-polling в сервисе либо GCM c высоким приоритетом.
>>670474 Угу. У Ондроеда все равно своя атмосфера, так что не заморачивайся особо на знании джавы - любой базовый курс и вперед. Я, например, Эккеля читал. Сириусли.
>>670408 >XMPP is how most of the popular chat apps send and receive messages. Some apps like GTalk, Whatsapp etc. depends completely on XMPP protocol. Whatsapp is believed to be using a customized version of aSmack.
>>670505 >of aSmack. Вот, кстати, про aSmack я и забыл совсем, да. Надо бы ее поковырять-посотреть что там и как. А еще в вотсаппе именно кастомайзед aSmack и хуй знает чего они там наворотили еще сами. >>670498 >Мне кажется сокет очень быстро посадит батарейку Да тут такое мнение есть: >here is a resource that's in use continually. It's the listening socket that was opened by the WhatsApp service. It just sits there on your phone waiting for an incoming network connection (see listen(2) for more information). This has essentially no cost in memory, battery power, or anything else.
>>669993 Да вообще пиздец, как же жопа от этого говна горит. Вызвал метод — поток завис пока юзер не подтвердил — поток отвис с готовым результатом. Ну почему такого нет? Зачем откровенную еблю устраивать? И так полный пиздец уже.
>>670538 Да мне тоже так все больше и больше кажется, но интересно же: вдруг более годные решения есть, а то лонг-поллинги вроде серверную часть хорошо нагружают, нет?
>>670524 >>670538 Лонг-пулинг требует коннекта, так что сокет то все равно нужно оживлять и тд. да и сам лонг-пулинг просто концепт и логика работы с сокетом. Сам еще смутно эту часть понимаю, но видимо все сводится к четкому построению коннекта с сокетом. Но вот как они сделали постоянное получение нотификейшнов хз, у ведра ведь есть режим когда даже проц спать ложится. Поправьте если ошибаюсь.
>>670545 Рахиты потому что. Мне не впадлу новые колбеки добавить, но и так не код а вермишель получается со всех этих листенеров и тд.
>>670763 Каким образом мвп поможет обойти адские колбеки? Ведь именно в колбеке я меняю интерфейс. Чтоб не путать пример. Есть интерфейс, есть хттп запрос, и есть контролер. В контролере запускаем хттп запрос асинххронно само собой, в интерфейсе вешаем прогрессбар, теперь приходит ответ от сервера, срабатывает колбек который убирает прогрессбар. Теперь вопрос, каким образом мне поможет мвп? мввм? Да похуй что на самом деле. Колбеки будут всегда. Я потому и не сильно понимаю смысла выноса всех запросов в отдельный сервис и потом перекидывания этих сообщений-колбеков через всевозможные костыли. Но мне не хватает знаний пока что. >>670757 Ну если так, то видимо начинается дикая борьба за приоритет.
>>670787 А ну и у меня есть друг-бэкендщик, вечно говорит мне про патерн репозиторий, но ведь данные с локальной бд и с сервера не одно и то же.
Ответы локальной бд - данные. Ответы сервера - куча говна и возможно данные. Вот и ебитесь с патернами теперь, они явно для мобайлдева устарели не все конечно же.
>>670787 >поможет обойти адские колбеки Да не обойти а структурировать и превратить лапшу в 9к строк в аккуратные 9к файлов, описывающих в 100 строк поведение для каждого необходимого коллбека. Убрать их нельзя, но можно причесать, я вот о чем.
Вот тут сорцы его примера. Начни с версии 5.0 - дальше он густо обмазывает все либами типа Rx, что не особо нужно, как по мне, но остальные версии посмотреть стоит - там наглядно объяснены тесты и есть примеры и полезных либ типа даггера. А буттернайф и Rx хуита, ололо
И это снова фрагменты-в-активити-после-onDestroy-кун. Помогите пожалуйста с этой проблемкой :) Вкратце: после триггера onDestroy в фоне и возвращению в приложение фрагменты наползают друг на друга хаотично и жестоко. Что делать - не ебу. С onPause все путем.Фрагментами оперирую с помощью hide/show.
Юзаю ретрофит и контентпровайдер. Вот думаю каким образом сделать асинхронную запись в бд после респонса ретрофита. Что посоветуете? Обычный тред? Асинктаск? Или обмазатся рхДжавой? Да я знаю что можно чем угодно, просто думаю стоит ли трогать рхДжаву ради такого.
Есть json с массивом объектов с массивами. Как распарсить при помощи gson пикрилейтед? По идее для каждого объекта нужно создавать классы с именем объекта, но они кирилицей. Как быть ?
>>671189 >из коробки Ммм? А подробнее? Чет упустил я по-ходу. >>670859 Батарея сдохнет. И да, анон прав>>670922 >>671085 Да, но он перезапустится после остановки. Как и при вызове onTaskRemove, что означает в случае сокета реконнект и возможно потерю данных. Хотя, можно подтверждения гонять, да
У меня появлиась проблема архитектурного характера которая похоже что упирается в убогость системы типов жабы. Допустим я реализую Restful библиотеку на Retrofit.
Код такой:
public abstract class ApiResult<T> ...
public class ApiResultSuccess<T> extends ApiResult<T> { T data; ... }
public class ApiResultError extends ApiResult { String errorMessage; ... }
Допустим в коде сервиса Retrofit: @GET(/yobas) Observable<Result<JsonObject>> getYobasInternal()...
И во враппере
Observable<ApiResult<List<Yoba>> getYobas() { return service.getYobasInternal().map(r-> //парсим r либо в ApiResultError либо в // ApiResultSuccess<List<Yoba>> ; }
Но в вызывающем коде мне придется даункастить ApiResult либо к ApiResultSuccess<List<Yoba>> либо к ApiResultError используя пресловутый instanceof. А если бы была какая-нибудь скалка или хаскель то я бы написал вместо всей этой хуйни просто Either (ApiResultSuccess T) ApiResultError и никаких даункастов бы делать не пришлось.
Теперь вопрос, как все эти анальные трюки избежать в жабе 7? Городить на каждую ошибку http свой эксепшн или кидать для http кодов отдельный коллбек вне observable не предлагать. Так как у меня очень сложная обработка критически важной секьюрной информации, а вызовами с коллбеками я наелся уже на старом API.
>>671231 Нет, json приходит двух типов {data: huita_data} и {error: huita_params}, причем данные внутри и того и того мне важны. Или ты предлагаешь все парсить в один ApiResult и проверять какой-нибудь хуетой типа if(result.isError()) ?
>>671240 open val с default value в базовом классе конечно же (можно было бы и вовсе обойтись без них если ты работаешь с резалтами только через матч по типу)
>>671239 >>671240 >>671244 Мда, котлин не радует, даже простенького паттернматчинга нет как в эрланге. Но это мне все равно не поможет, так как проект я пишу не для себя а для дядек, которым ОЧЕНЬ не понравится если я притащу в проект еще один "экспериментальный хипсторский язычок". >>671260 Нет.
>>671235 > типа if(result.isError()) ? У тебя будто большой выбор, либо каст либо вынос части логики в базовый класс. Не пойму что не так, это стандартный подход.
Я бы на твоем месте вообще написал бы аксептер для retrofit, который бы кидал исключение на НЕ 200. А потом бы обрабатывал бы в onError(...)
>>671271 Классы не обязаны были иметь общего предка для матча по типу; я ввел супертип для удобства, чтобы не приводить к kotlin.Any (java.lang.Object) если тебе нужно передавать результат куда-то, является он ошибкой или нет.
>>671294 >У тебя будто большой выбор, либо каст либо вынос части логики в базовый класс. >Не пойму что не так, это стандартный подход. Ну, наверное ты прав, просто привычка программировать на нормальных языках сказывается. Как на жабе попишу, чувство будто говна пожевал. >Я бы на твоем месте вообще написал бы аксептер для retrofit, который бы кидал исключение на НЕ 200. >А потом бы обрабатывал бы в onError(...) У меня была такая идея, но дело в том что сервер в при ошибке может в json написать причины и прочее, и мне это нужно обрабатывать. К тому же сам JakeWarthon вон https://github.com/square/retrofit/issues/1102 пишет что ексепшн в ретрофите бросается только при IOException, а все остальное гораздо лучше хэндлить в основном потоке.
В верстка-треде пишут что, что бы взяли на работу нужно минимум 400+ часов обучения, сколько же тогда нужно потратить времени что бы взяли джуном на Андроид разработку?
Сосаны, давайте напишем зарплаты, ну что бы так примерно чувствовать. А то в стартапчике на пендосов мидлу/синиору предлагали 1500-3000, вот хочу знать скоко нормально, сейчас получаю в месяц по 800 лол.
Студия 1.5.1 и 2 бета 6, уебунта 14.04. Бесконечно крутится ромалка билд гредл в любом проекте. Студию переставлял, бету накатывал - хуй там плавал. На другой пеке та же ось и студия - все работает на ура
>>672473 У меня на observable вышло быстрее чем когда в давние времена я пытался вручную управлять пулами тредов. К тому же не вижу никакой разницы с точки зрения конечного программиста getYobasFromDb(context, new YobaListener() {... или getYobasObservableFromDb(context).doOnNext(new Action1() {...
>>672475 Да я сейчас протестил, нахуярил тысячу эллементов дак ему просто похуй что в юитреде что в отдельном. Тупо та же скорость и провисание на смене курсора в адаптере. Сейчас потестим с 10к.
Да просто если уже с rx то делать ровно и переделывать все реквесты. Уже когда буду диплом пилить по "Реактивное программирование в андроид" то поюзаю.
>>672477 Эх молодежь, сколько раз уже говорили: вызывайте у курсора в фоновом потоке getCount() перед тем как отдать его в главный. Это надо чтобы он прогрузил все данные из базы () в память и потом не пытался в главном потоке читать с диска.
ListView (GridView и тд) все равно вызовут getCount для расчета высоты скролбара (только уже в главном потоке).
>>672496 У меня все на курсорлоадерах же, просто сама перерисовка не хуй собачий, да и в листвью геткурсор как ты и сказал вызывается. >>672512 У тебя с твоим реалмом подобный механизм только с бубном поднимается.
>>672516 > У тебя с твоим реалмом подобный механизм только с бубном поднимается. Мне нет необходимости заниматься такими вещами. Если список короткий, я могу спокойно сделать copyFromRealm и работать с скопированными в оперативку данными, иначе спокойно работаю с lazy списком.
>>672518 >Если список короткий, я могу спокойно сделать copyFromRealm и работать с скопированными в оперативку данными, Нунихуяжсебе, а с скйлайтом это невозможно. >иначе спокойно работаю с lazy списком. Я так понимаю это подобие курсора.
>>672732 Асинктаском проще делается работа в отдельном потоке с последующей обработкой результата в основном. К тому же обычно асинктаск использует пул потоков, а не создаёт новый поток. Если заняты все потоки из пула, задача встаёт в очередь.
>>672732 Асинк таск это всего лишь обертка для работы с тредами. Все упирается в них, но разумеется нет смысла каждый раз создавать новый тред что бы записать в базу, заводят пул тредов, но вариант с асинк тасками некоторые сочтут примитивным, рабоче-крестьянским так сказать. Из альтернатив - свои велосипеды, ORM, Realm и rxJava
>>672741 > асинктаск использует пул потоков Starting with HONEYCOMB, tasks are executed on a single thread to avoid common application errors caused by parallel execution. Так что только при использовании executeOnExecutor
>>672742 Вообще законно юзать realm без rxJava? А то я относительно недавно вкатился в андроид дев, и не хочу учить пока йоба фреймворки, а реалмом попользовался, он мне оч понравился.
Как же бомбит от количества вещей, которые нужно знать для разработки. БД, ОРМ, тесты, моки, фреймворки, Джава, тысяча сраных библиотек, написанных непонятно кем, эвент басы, реактивное программирования, теперь ещё и сраный Котлин релизнулся. Когда это учить-то всё?
Все же сложноватый rx, немного голова кругом идет.
Вот пример. В гайде так написано, но я не вижу логики. myObservableServices.retrieveImage(url) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe(bitmap -> myImageView.setImageBitmap(bitmap)); Разве bitmap -> myImageView.setImageBitmap(bitmap) Не сабскрайбер? А сабскрайбер у нас не в мейн треде же, следовательно эрор и пиздец.
>>672901 Смотри есть простое привило: subscribeOn(...) - в этом шедулере будут исполнятся методы от начала и до subscribeOn позиции. observeOn(...) - в этом шедулере будут исполняться методы ниже по списку до следующего observeOn
Ладно задам еще один вопрос по rx и сьебу чтоб не заебывать.
С сервера прилетает бейсреспонс с статусом, кодами, и самим обжектом ответа, который как раз меняется от запроса к запросу. Перед тем как достать лист я хочу проверить прошел ли запрос успешно. И потом уже отдать лист во флетмапу и тд. Как сделать обработку ошибок перед отдачей листа во флетмап? Или просто вытаскивать список, а если схвачу ошибку то в онЕроре выведу код?
Есть БД со списком все СМС с телефона. Хочу сделать выборку только последних СМС от каждого адресата. Как это лучше сделать? Можно ли написать такой SQL запрос или сразу весь массив запросить селектом в List и из него уже сделать выборку?
>>673267 Как думаешь, нормальная практика сделать кастомный екзепшн который будет иметь метод для выдачи сообщения чтоб выводить читабельный ерор в юи?
и вопросы по коду 1)как сделать обработку и споследующим выводом на экран нормально и красиво? 2)Как мерджить флетмап я так и не понял, зипом чтоль? Да и нужно ли если обычный фор менее заебистый. 3)нужно ли делать вставку в бд в ио треде?
>>673466 Да, у меня архитектура "толстый презентер". Нет я бы рад все вынести в какой-то синглтон-ретейнед-фрагмент, но пока что не ебу как делать нормальную привязку с юи. Но сейчас не в архитектуре вопрос.
А так спрашивай отвечу что хотел сделать, и спасибо что помогаешь.
>>673503 Тут я беру данные из запроса, смотрю прошел ли он успешно.(уже своя логика, например может не быть доступа) Если успешный то сейв в бд без какого либо вывода, дальше уже работают лоадеры. Если ошибка, то нужно выводить ошибку.
Алсо, это идеальная рестапи сразу отдает удобные листы, а у нас херпойми что которое еще нужно самому проверять.
>>673639 Ок, позже вечером напишу, или завтра утречком, как будет время посмотри.
У самого уже каша в голове, нахуй я только подработку помимо работы взялся делать, ладно бы код писал, так дебажу их апиху и баги выцепляю по часу. Что-то нервы здавать начинают.
>>673696 Ну учитывая что я уже начал расписывать а потом прочитал, то вдруг лучше обьяснит мою проблему.
Апиха у нас не обычный рест, в этом трабла и сосредоточение костылей для распознавания ошибок. Сервер отдает джейсон, в котором есть статус, код ошибки(если статус фолс) и бади(как раз интересуемый результат, в примере лист). Потому мне приходится перепроверять респонс в онСаксесе(в колбеке ретрофита). И да, эти ошибки я в основном должен выводить в ЮИ.
Как уже говорилось, юзается в фрагменте, и в нем я как раз пытаюсь сделать хендлер ошибок о котором писал выше.
Также в примере я просто записываю данные в бд, но хотелось бы понять как сделать красиво также и вывод данных в ЮИ(в связке с ерор хендлером этим, просто вывести данные в юи тред легко).
Итого, я пытаюсь сделать чейн с эрор хендлером который выводит ошибки в юи и сабскрайбера который будет в одних случае писать данные в бд, в других выводить данные в юи (возможно оба варианта сразу). Сумбурно я это все описал конечно. Но надеюсь идея понятна.
Народ что вы используете если нужен котнрол, который ведет себе как горизонтальный linerlayout, но если места не хватает для чаелда он переносит его на следующую строку.
Типа как контрол WrapPanel для XAML.
Обычно я пишу его сам (из ViewGroup), но чет сегодня мне лень.
1. Чем плохо юзание статических переменных в Андроид разработке? Как самое наркоманское - хранить в активити ссылку на саму себя, чтоб вызывать из фрагментов методы активити. 2. В RecyclerView, что лучше: менять один и тот же список и юзать NotifyDataSetChanged, или можно создавать каждый раз новый, создавать новый адаптер и SetAdapter'ить его? Есть ли разница?
>>674018 >Как самое наркоманское - хранить в активити ссылку на саму себя Так там уже есть такая ссылка, this называется. >чтоб вызывать из фрагментов методы активити. У фрагмента есть гетактивити, в чем проблема? >Чем плохо юзание статических переменных в Андроид разработке? Как статические переменные относятся к твоим словам процитированным мною выше?
>2. В RecyclerView, что лучше: менять один и тот же список и юзать NotifyDataSetChanged, или можно создавать каждый раз новый, создавать новый адаптер и SetAdapter'ить его? Есть ли разница?
Смена адаптера это конструктор, это инфлейт новыхВьюх и тд и тп.
>>674048 Да даже разглядывать как мухи садятся на говно интереснее энтерпрайзопараши, к чему вопрос? В андроиде тоже программировать удовольствие неважное, но это лучше чем ковыряться в гигантском куске дерьма написаного в девяностых, выполняющего функции 1С.
>>673925 Иногда это идеальный вариант, к примеру когда у тебя есть список тегов статьи. А теги это ведь просто разное кол-во разной длинный слов, их один фиг ровно не выстроишь.
>>674029 1. Это к чему я: Если у меня активити в единственном экземпляре, и каждый фрагмент в нем - тоже, то вызывать из фрагмента методы активити при помощи getActivity().someMethod() является нормальный практикой, или надо с листенерами ебаться обязательно? 2. Ну гугл говорит, что разницы нет, и там и там все вьюхи с нуля заново рисуются.
короче, юзаю data binding для recyclerview в фрагменте и он занимает не свое место (franeLayout как это делается в транзакции ) а весь, сука, экран . Не подскажете, что можно проверить в таком случае ?
У RecylerView можно в xml задать: spanCount reverseLayout stackFromEnd У класса Properties есть еще поле orientation, вместе с выше указанными, но в xml его указать не получается. properties.orientation = a.getInt(R.styleable.RecyclerView_android_orientation, VERTICAL); properties.spanCount = a.getInt(R.styleable.RecyclerView_spanCount, 1); properties.reverseLayout = a.getBoolean(R.styleable.RecyclerView_reverseLayout, false); properties.stackFromEnd = a.getBoolean(R.styleable.RecyclerView_stackFromEnd, false); Я пробовал и app:orientation и app:android_orientation.
Братец-медведец, я понимаю ты занят, но как будет время не забуть про меня, будь то завтра или через несколько дней. На самом деле интересно узнать взгляд со стороны.
>>674836 Лол, уменя такая же задача в будущем может появится, что бы не было прерываний, нужно поднять прокси сервер свой на локалхосте аппарата, и его передать как урл, а ужу он будет скачивать/писать файл и отдавать сокетом инфу медиаплееру. В интернет валяется несколько примеров на гитхабчике.
А еще такой кейс. Что, если у нас есть звуковая дорожка и мы инициировали процесс ее скачивания, а уже после этого хотим воспроизвести её. Предположим, она находится в середине процесса скачивания. Как бы вы разрулили это дело?
>>674915 Как вариант, попробовать скачивание запихнуть в FileOutputStream, а тот же файл скормить плееру. У самого плеера ловить ошибку считывания файла.
>>674947 Будут заметные прерывания, когда ты попробуешь пройти дальше кусочка. То есть медиа плеер берет и полностью грузит в себя файл, вот так вот, а то, что ты потом запишешь ему до жопы.
>>674154 Да нормально, но лучше конечно как-то по красивше. Модешь дополнить адаптер и уведомить его о том что что-то добавилось, или свапнуть, тогда кэш вьюх останется.
сап, есть ли годные гайды по новомодной хуйне типо rxjava, dagger, flow, mortar и прочей хуйне. Решил тут по собесам походить, так в кое-где уже начинают спрашивать про эту херь. Смотрел пару примеров по rxjava и dagger, все это конечно потешно, но толи примеры мелковаты, толи я тупой, но не могу понять какие преимущества мне дают эти либы. Вот например даггер, ну ок, делаю inject я в каждой активити, ну и что, чем это лучше чем простой синглтон. тестировать активити мне сто лет не нужно
>>675638 > Тестировать активити мне сто лет не нужно Мы вам перезвоним
На днях решил профессионально обмазаться rxjava и выяснил что НЕТ по нему нормально литературы. Потому что сам по себе она нафиг никому не сдался (за пределами andriod). Везде бал правит akka и даже для Netflix (которые и делают rxjava) он только база для и библиотеки Hystrix.
Пытаюсь сделать репозиторий с хранением данных в оперативке. Вот у меня есть observable с retrofit'a. Мне это говно нужно обернуть так, чтобы: 1. Если даннные уже есть в оперативке, отдать Observable.just Ну тут ничего сложного, в observable.defer делать проверку и готово. 2. Если данных нет, то начачать загрузку. По сути отдать обсервабл от ретрофита, но есть сранный пункт 3. 3. Если загрузка уже в процессе, то не начинать ее заново. Если отдавать всегда обсервабл ретрофита, то ретрофит будет делать запрос заново в onSubscribe. Я хочу чтобы подвязывался к текущему запросу. 4. Добавить во все это подтягивание и сохранение в БД для работы офлайн. Ну здесь тоже не сложно. doOnError для вытаскивания из бд, doOnNext для сохранения в бд. Главное с потоками разрулить.
Можно сделать на колбэках, тут даже более чем понятно как, но мы же хипстеры на гребне волны технологического прогресса!
>>675695 Нужно если ты активити используешь как презентер.
И ты видимо не в курсе, но инъектить можно не только в активити. Паттерн такой есть DI, позволят тебе абстрагироваться от реализации более низких уровней. Плюс на unit-тестах, можешь заменить реализации моками.
>>675748 Зато все зависимости в одном месте. Опят таки в реальном проекте будут не A, B, а какие-нибудь AndroidStateChangedAccessibilityService(...).
В общем ХЗ, может это лень со временем приходит, когда в очередном проекте пишешь один и тот же бойлерплейт. А dagger2 может тебе бац и нагенерить нужного кода.
Хули на винде эта еботня (студия) три гига оперативы жрет, еще и виснет. Пытался вкатиться с таким энтузиазмом, а теперь все нахуй послать хочется. А как с убунтой у андроид студии?
>>675897 Решил я заменить запрос с ретрофитом на Rx. Результат вот. http://pastebin.com/e79vjAJS Там есть комменты что меня смущает. Также вопросы
1)как сделать обработку данных на неудачный запрос с последующим выводом на экран нормально и красиво? 2)Как мерджить флетмап я так и не понял, зипом чтоль? Да и нужно ли если обычный фор менее заебистый. 3)нужно ли делать вставку в бд в ио треде?
Если у меня есть пара фрагментов как экраны между которыми я постоянно переключаюсь, с довольно тяжелым контентом ( RecyclerView с большим количеством имаг ) лучше переключаться между ними заранее инициализировав экземпляры этих фрагментов или в каждой транзакции прописывать создание нового экземпляра ?
>>676127 Ну давай, расскажи кейсы когда оно тебе понадобилось. Вообще я о том что если ты начал юзать все это, то ты уже явно перерос книгу "джава для ведра" и додумаешься найти инфу
>>676132 >есть пара фрагментов как экраны между которыми я постоянно переключаюсь >есть пара Смотрим на принцип работы фрагментпейджерадаптера. Он как раз для этого и создан, и в основном его реализации создают фрагменты в конструкторе, а потом просто крутятся и выводятся. Потому думаю не критично иметь все, если между ними действительно постоянный перебор, учитывая что создание такого фрагмента доовльно затратная штука.
>>676159 Если бы мне понадобилось что-то из этого, уверяю я бы сделал, мне хватит знания о существовании инструмента.
Сейчас столько либ для асинхронки, которые, я уверяю, работают лучше чем ты напишешь, а ты все велосипедишь. Потому я и спрашиваю, какой смысл хуярить самому велосипед?
>>676142 Я не тот анон, просто охуел с пердежа в лужу. За примером не нужно далеко ходить — асинктаск. Семафоры же помогают там, где не хватает синхронайзд, например.
Предыдущий тред забивает головы ньюфагов котлином тут:
https://2ch.hk/pr/res/647624.html
Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом. Ждем релиза второй версии студии со всеми плюшками.
А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript легион, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная, также как и количество вакансий.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный, и работа есть.
5) RoboVM - идейный наследник ксамарина, а теперь уже и его часть но на Java. Менее популярен, так как моложе, и вакансий я не видел.
Отдельного упоминания стоят:
1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу:
Интернет-ресурсы
1) http://developer.android.com/index.html
Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта.
2) http://stackoverflow.com/
Пользуюсь чаще чем первым сайтом. Можно найти практически все.
3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже.
http://startandroid.ru/
и
http://developer.alexanderklimov.ru/android/
Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить.
4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять.
5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну
1) The Busy Coder’s Guide to Android Development
А теперь, так как заебали уже всех, гайд для:
>"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com.
Можно Эккеля "Философия java" почитать.
Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности.
4) Дженерик типы, они как раз юзаются в коллекциях.
5) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
6) Потоки ввода/вывода (streams). Не путать с тредами(threads).
7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
9) Работа с Sqlite, нужна будет в любом случае.
10) Работа с json.
Привет клиент-серверка.
Пишите в треде что добавить.