Коротко о главном: 1) Мобильная разработка - это весело. 2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом. Ждем релиза второй версии студии со всеми плюшками(когда он уже выйдет-то?).
А также о неглавном: 3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити. 4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Хз что будет дальше. 5) RoboVM - идейный наследник ксамарина, а теперь уже и его часть но на Java. Менее популярен, так как моложе. Куплен Microsoft. Вот он точно RIP.
Отдельного упоминания стоят: 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. Привет клиент-серверка.
Решил я заменить запрос с ретрофитом на Rx. Результат вот. http://pastebin.com/e79vjAJS Там есть комменты что меня смущает. Также вопросы
1)как сделать обработку данных на неудачный запрос с последующим выводом на экран нормально и красиво? 2)Как мерджить флетмап я так и не понял, зипом чтоль? Да и нужно ли если обычный фор менее заебистый. 3)нужно ли делать вставку в бд в ио треде?
Чем nullable types лучше option monad, м? a?.b?.c!! – так никто не будет делать жи
Разберем два случая
1. Нуллябельный тип как требование интеропа с джавой
Если вызываешь метод сторонней либы на джаве, скорее всего ты захочешь поймать и обработать null сразу на месте, например val collection = Option(db.getCollection("blah")) match { Some(c) => c; None => кидаем ошибку } Иначе Option/нуллябельность протечет к тебе в код и все изгадит своим присутствием.
2. Нуллябельный тип как требование бизнес-логики
Если твоя переменная может быть легитимно нуллябельной, ты никогда не захочешь использовать !!, a smth map { _ => _.c.d } выглядит идиоматичнее, чем smth?.c?.d?
Котаны, есть фрагмент в котором сделан список устройств bluetooth и код, отвечающмй за поиск и отображение устройств в списке. Этот фрагмент используется внутри другого фрагмента и в одной активити. Причем там везде разные действия совершаются при выборе устройства в списке. Как бы мне это по-удобнее обработать? Приделать к фрагменту колбек?
Не могу запихнуть как нужно recyclerView в scrollView. Вроде как сказали, что ресиклер научился врапаться, но запихнутый в релайтив с below=@id/... он скролится только на остатке области между @id/... и низом вьюхи, вместо того, чтобы при скроле уводить @id/... за экран вверх. Как правильно сделать то?
Есть решение через CoordinatorLayout + AppBarLayout, однако вдруг мне в будущем понадобится поместить контент ниже recyclerView. Да, да, можно позасирать адаптер, но нахуй надо.
>>677465 Одно дело написать ресайклерадаптер с курсором, другое пердолить туда вьютайпы. Когда у тебя хидер и простые айтемы, то как то похуй. Но когда у тебя идет 3 списка подряд из разных элементов по 20 штук, при этом если в один из списков пуст, то нужно показывать плейсхолдер, то количество вьютайпов возрастает до 6 минимум. Добавив вьюхи разделители, уже 9. В итоге из нескольких адаптеров, который каждый занимается своим типом, мы получаем монструозный пиздец.
>>677474 Ну а что ты хотел с такой нестандартной версткой? Юзать скролвью и любой лист, грид, рейсакйлервью костылизм уровня пиздеца. лучше уж вьеби аддВью в обычном линеаре.
>>677551 >А где он? вот тут .doOnNext(new ValidateResponseOrThrow()) Я проверяю в респонсе что пришло, если апи кинула мне код ошибки(типа пароль не найден) я сровлю кастомный рантайм экзепшн который будет хранить в себе этот код ошибки. А в сабскрайбере уже ловлю в онЕрроре и паршу ошибки ExceptionParcer.parceException(throwable)
Простоя хз как по другому словить и передать этот код для вывода.
>Писал бы котлине, вообще бы не парился с чекед-исключениями. Не, котлин потом, я и так решил rx хуярнуть в новый проект на работе начальство заебало вот и решил развиваться.
>>677590 >Не плохо бы избавиться от contacts в subscribe, ты же его там не используешь. Однозначно нужно, я уже думал об этом, просто я новичек в лямбдах и не понял как создать лямбду без входящего аргумента, потому решил оставить это на потом.
Алсо, ты предлагал в один класс все вынести, вполне вариант кстати, но как назвать этого монстра который будет проверять валидные ли данные - сровить экзепшн - конвертировать лист - и записывать в бд? Да и не слишком ли дохуя разноплановой работы для класса?
>>677760 Че ты там выгружать собрался? Можешь прицепить RecyclerListener, но это не совсем то. Если тебе именно прокрутилось то тут нужен onScrollListener. Еще у адаптера есть хук onViewRecycled.
>>677597 >Алсо, ты предлагал в один класс все вынести, вполне вариант кстати, но как назвать этого монстра который будет проверять валидные ли данные - сровить экзепшн - конвертировать лист - и записывать в бд? Да и не слишком ли дохуя разноплановой работы для класса? GetContactsResponseController
>>677760 Что ты пытаешься делать? Звучит как хуйня. Ну выгрузишь ты их, что дальше? Обратно как загрузишь? А вообще можно сделать логику в биндВью, в вьюхолдере помимо вьюх держать идшник итема, и при вызове в онБинд затирать итем по идишнику который был.
>>677646 Я не думаю что можно перерисовать именно кусок вью, но можно сделать сложное вью с несколькими вью.
>>677875 Первый параметр функции subscribe() это интерфейс Action<T> (пик 1), который превращается в лябду с одним параметром. В Java ты не можешь отбрасывать параметры лямбды.
По выносу в отдельный класс, я предлагал типа такого (пик 2, 3)
P.S. Для тестов еще удобно инъектить шедулеры, что бы избавиться от асинхронности.
C AppBarLayout уже работали? Пытаюсь подпихнуть туда хидер (довольно большой, на пол экрана) ресайклервьюхи, чтобы в адаптер не шаманить, но проблема в том, что проебывается инерция у скрола вверх. Вниз нормально, но когда вверх, то ресайклер доскроливается до своего начала и не показывает хидер. Когда начинаю выскролливать вверх дальше, то скролл идет без инерции.
Антошки, хочу написать крохотную штуку для планшета, с андроидом дела никогда не имел, пишу на яве. Пользователь входит в приложение, логинится, переходит на основной экран. Там два поля ввода, шкала от 1 до 10 и кнопка запостить. Нажимает кнопку запостить, появляется окошко с надписью и приложение обратно переходит на основной экран. Всё. Сервер на spring boot и spring security, с ним проблем нет. Тыкните носом в какой-нибудь гайд для совсем нубов. Спасибо.
Господа, щекотливый вопрос. Как рендерить кучу мелких картинок покадрово? Видюшки не получатся, так как альфа канал, а задник тоже двигается, да и вообще как бы это так, что бы китайские ведра не охуели, движущихся элементов где-то 12. И появлятся они будут постепенно. Я вот лумаю между SurfaceView и TextureView, чем отличаются, или гифками? Или это все путь в никуда и будет говно и нужно лезть в натив?
>>677962 Понял спасибо, таки с таким разделением намного красивее.
Единственное что, я все ебусь как с ретролямбдой вызвать в сабскрайбе онКомплит? Если убрать тип результата в гетКонтактс то сабскрайбер запрашивает тип данных для Action1. Но у них же есть Action0, почему оно не хочет подтянуть этот интерфейс?
>>678247 > Почему они не сделали конструктор с Action0, Action1? Потому что RX это в некотором роде асинхронный стрим. У него предназначение передавать данные по цепочке (обрабатывая их), а у тебя другой случай, тебе результат не нужен.
== Дополнительная информация Смотри тут rxjava 1.1.1 релизнулась и там добавил класс Completable (обсервабле без результата). У него как-раз есть subscribe(Action<Exception>, Actin0)
Вот до конца жизни буду поражаться с создателей ведра. Ну сделали вы TextUtils, спасибо. String nullIfEmpty(@Nullable String str) {} круто да, но где такой же метод но наоборот? Кому вообще уперся налл? Почему было так сложно сделать его? Теперь пили свой СтрингУтилс с этим методом, спасибо бля.
>>678432 >>678450 В хрум-хруме последнее время даже full hd видео на ютубе не грузится даже на 60 мегабитах. Последнее время юзаю пикрелейтед. Там всё заебись.
>>678630 Я бы тебе посоветовал android weekly, но он на самом деле параша. Каждую неделю высылают статьи, которые ОДИНАКОВЫЕ. Кодеры-хипстеры копирайтят друг у друга статьи по MVP, rx и сейчас начали котлин, сотни их! и все одинаково бестолковые.
Хочу написать 3д аналог "игры" жизнь. Для этого мне нужно наваять трехмерный куб(параллелепипед) из маленьких кубиков, которые берут значение из трехмерного массива и в зависимости от значения рисуют себе нужый цвет. Еще эту штуковину нужно уметь вращать и управлять зумом. Доброаноны, накидайте список, технологий, областей, кусков андройдфреймворка и других интересных слов по которым я смогу замутить такой функционал. До этого с 3д вообще не работал так что вводные в этой области практически нулевые. С++ на уровне "знаю, но писать не умею"(надеюсь в натив не придется лезть).
>>678776 > Хотя какпредставлю какой гемморой в джаве, когда дело доходит до многопоточной всякой фигни... Схуяли? Треды везде одинаковые, примитивы синхронизации тоже.
Окей возможно у меня это от непонмиания, зачем курсор? Я же могу все его итемы закверить и выплюнуть лист, а когда че-то поменяется кверануть и поменять соответсвующие итемы? В чем выигрышь курсора? Еще и с RecyclerView он как-то не дружен.
Посоветуй, анон. В разработке под андроид не очень силён (впрочем, как и вообще в разработке). Есть маленькая бд на ~50 строк, в которой хранятся поля одного POJO-класса. Есть одна строка и одно число. Всё перечисленное - это те данные, которые на данный момент хранятся в специальном фрагменте (DataFragment, в нём setRetainInstance(true)), подгружаются в него при запуске приложения, в рантайме читаются/модифицируются им и при закрытии приложения пишутся в бд (для POJO) и SharedPreferences (для строки и числа).
Однако, в связи с небольшими изменениями архитектуры приложения, на меня посыпались NPE - сначала из-за того, что данные грузились в onCreate DataFragment'а, а он успевал использоваться до этого самого onCreate, потом ещё из-за чего-то.
Такой способ хранить данные я довольно давно вычитал на developer.android.com, но повторно найти этот гайд не могу.
Так вот, судя по тому, что приложение разваливается - что-то я делаю не так. Встаёт вопрос - что делать с этими данными? 1) Каждый раз дёргать запросы к бд: запросы будут довольно редкие, но почему-то кажется, что это не совсем то; +где хранить те самые строку с числом? Дёргать из SharedPreferences каждый раз? Впрочем, там частые обращения ещё более маловероятны. 2) Хранить данные в синглтоне: полный проёб lifecycle'а и оперативки; удобный доступ к данным. 3) Продолжать извращаться с DataFragment'ом и пихать кучу неадекватных инициализаций и проверок + проёб оперативки.
Зеленые господа, объясните начинающему адепту почему при установке различных констант часто используются разные побитовые операции, маски какие-то. Что за хитрый паттерн и для каких целей так сделано?
>>679377 Что бы они уникальными были, так точно не ошибешься. А маски что бы обойти несовершенство типов но при этом не создавать классов. Тот же MeasureSpec несет сразу два числа в одном инте. Байтоебские изъебы короч.
>>679477 Ну если для тебя ObservableField<T> не костыль то все оке. Там единственный костыль это то что иногда кодогенерация не подхватывается, но всем все собирается, а светится жутки красным цветом. ну и в xml'ке нет автокомплита в кастомных аттрибутах и прочих вкусностей. Ну и со списками не очень удобно, большой свитч получается, если например 8 разных вьюшек в списке. А вообще очень хорошо.
Конкретно вопрос по поводу Genymotion. Есть какой-нибудь смысл создавать RAM-диск и переносить туда virtualBox, будет от этого эмулятор бегать шустрее?
Или для заметного роста быстродействия нужно переносить и часть\все файлов студии?
>>680076 Понятное дело, что ssd лучший вариант. Но сейчас у меня возможности купить его нет. Зато есть несколько гигов никогда не используемой оперативки, вот я и спрашиваю как бы мне получше это использовать.
>>680304 Я имею ввиду нахуй тулить ресайклервью если в дизах нету никаких анимаций для итемов? Это тупо, потому как ресайклервью создан как раз для них.
Это что ж получается, приложению выделяется всего 35 мегабайт оперативной памяти? И нахуя тогда делают телефоны с 2 и больше гигами памяти если ими нельзя воспользоваться?
>>680557 Нет не быстрее. Вьюхолдер там нихуя не дефолтный, тебе все равно нужно запоминать ссылки на элементы итема. В результате та же хуйня но сложнее. >>680589 Каким хуем датабиндинг только с рейсаклером работает я не понял.
>>680788 Зависит опять же от девайса. На фуллхд и выше много тяжёлого графена, а больший объём позволяет больше отжирать. Некоторые приложения запросто по 200 мб жрут.
>>680786 >В удобности использования. Особенно в комбе с data binding ^_^. Любой белый человек скажет что разницы нету нихуя, ибо адаптеры для ресайклера и листа практически одинаковы.
>>680856 >дефолтную оанимацию Ох ты меня бесишь. Еще раз, если анимация ненужна - юзать ресайклер удел идиота. >ништячный дефолтный вид На ноль поделил. >в отличии от листа, который говно И чем же он говно?
Еще раз, ресайклер дает только анимацию, гу и возможно более удобную подмену с ЛинеарМенеджером.
Котаны, есть задачка: периодически сервис пуляет мне broadcast сообщение и мне нужно в ui произвести выборку из БД и перерисовать вьюху. Выборка из БД выполняется асинхронно и занимает значительное время. Возможно при больших объемах она не успеет завершиться прежде, чем придет следующее broadcast сообщение.
Как бы мне слелать обновление инфы с такой частотой, с которой оно может обновляться? Проверять перед запуском статус предыдущей async task? Это надежно?
>>681191 Просто игнорируй сообщение - ведь ты уже далаешь то что должен начать делать при получении сообщения. Зачем тебе пердолиться с подстройкой частоты?
>>681191 Двачую этого >>681204 Просто делаешь синхронайзед переменную и по ней смотришь началась ли работа с выборкой в бд, меняешь значение по получению данных. В результате игноришь все то говно которое прилетало во время выборки.
Другой вариант - стопать то что делаешь сейчас и начинать новое.
>>681191 В общем случае должно быть все равно, тк выборка не меняет базу и если она выполниться дважды, то вернуться одни и те же данные.
Насколько я помню, тот же курсор-лоадер перегружается данные асинхронно не заботясь о синхронизации (она и так произойдет когда данные вернутся на UI тред).
>>678762 Гайс, а почему все так хают Gовно? У нас в конторке босс (и тимлид по совместительству) упоролся им. И вроде как всем доставляет, а мне как-то похуй: сказали - ну разобрался, пишу вот бэкенд на нем (ну и клиента на ведре). Какие подводные камни? Они сами нубы в го, как и я. На чем вообще обычно пилят бэк для ведер? Какие best practices? Не хочу с этими гениями потом хлебнуть говнеца, лол.
Чуваки которые юзают databinding, как он переживает proguard? А то вот назначил в качестве хендлера например: handler.onUserClick, сам метод нигде кроме байндинга не вызвается, proguard же кинет через плечо если я чего-то не сделаю с ним?
>>681360 так и не смог заюзать стандартный эмулятор. хоть работает и быстро, на маке виснет каждые пять минут и рутоваться не захотел. буду дальше пиратом
Сап, читаю api, которую склепали ребята, отвечающие за северную часть . Они в частности , помимо всякого бешенства пыхыпышников, хотят, чтобы токен генерился на клиенте. Это вообще легально ?)
>>681649 Нужно им обяснить что на ведроиде твой код посмотерть может любой васян, даже если ты спрячешь все в C/C++ это все поддается реверс инжинирингу в результате чего их засыпят поддельными токенами и они соснут.
>>681733 Да. Я так два раза делал, правда, оба раза с испытательного срока. Ни о чем не жалею. Ты на работе проводишь больше времени, чем дома. Тут к вопросу выбора нужно подходить серьезно.
>>681738 Ну я как раз с ипсыталки сюда перепрыгнул, сначала было в принципе норм. Хотя мозгоеб всегда был. Но сейчас меня уже стойко доебало отношение тех же серверщиков, пишут сами хуйню и в результате еще и тебя заставляют писать говно.
Но думаю ты прав, помню как классно проходили первые месяцы тут после того унылого пиздеца на испыталке.
>>681847 Ну так конечно ты должен дать им токен социалки блять, это не называется сгенерить. А вот дальше они могут думать чо сним делать - зависит от вашей архитектуры, по минимуму они должны его проверить достать инфу и выплюнуть тебе токен вашего сервиса или разрешить использовать эти.
>>681972 Не агрись на него так, на самом деле я другой анон и у меня даже при входе через соц сеть дают токен. Т.е. ид или токен социалки по большому счету юзаеться как логин.
Анон, подкинь идею приложеньки под ведро. Только не простой приложеньки, а золотой! Что бы и список друзей был, соц сеточки + кучу всяких новых модных штук.
>>682006 Я агрюс не на него а то что он пытается выставить бекендщиков лохами, хотя сам не шурупает. Я тоже так использую токены социалок, все окей, вообще идеальный случай когда ты даешь бекенду токен а он там регистрирует-авторизирует и вообще берет инфу, а не ты на фронте ебешся с колбеками на ссылку на картинку профиля и кавера.
>>682391 > Он жизненно необходим? Он нужен что бы стандартный эмулятор не тормозил. > аналог какой скчать? Genimotion (или Xamarin Android Player). Конкретно для винды есть Visual Studio Android Emulator > как оптимизировать скорость работы андроид студио? ОЗУ 4Гб + SSD (это само важное)
бля, новый ведроид вышел, а мне еще так много изучить нужно из старого. Голова пухнет, только я берусь изучать что-то, как выходит новая версия этого чего-то. а еще нужно есть нужно изучить это бгмерзкие либы новоможные, патерны подтянуть, бляяяяя
>>682738 Анон, вот смотри. Гугл типа зарелизили Студио 2.1 Глянул на свою -- у меня 1.5. И нигде нет инфы, как обновиться до 2.1 Это типа только для девелоперов с платным аккаунтом или как?
>>682738 > Some Java 8 language features like default and static methods, streams, and functional interfaces are also now available on N and above retrolabma от Google получилась ###### таки пока лучше
Парни, есть какая-нить годная книга по программированию на андройд? Сайты из шапки не понравились, поверхностные какие-то и опять клоунада с хелоу кити, класс хуй-пизда, и т.д
Что-то типа хэд фёрст джава, но уже под андроид подзаточенное.
Сап, разрабы. Встал вопрос о безопасности. В приложении создается intent, ему прописывается action и кладется putExtra, вся эта хуйня отправляется через sendBroadcast. Т.е теоретически, любое приложение, в котором прописан broadcast receiver с таким же action может прочитать отправленную информацию? И как проще это пофиксить? Явно задать intent?
>>683103 >When you use sendBroadcast(Intent) or related methods, normally any other application can receive these broadcasts. You can control who can receive such broadcasts through permissions described below. Alternatively, starting with ICE_CREAM_SANDWICH, you can also safely restrict the broadcast to a single application with Intent.setPackage
>>683042 Оба понятия гуглятся же Под адаптивной версткой скорее всего хотят чтобы ты запиздолил сайт на десктопе и этот же сайт, но с мобильной адаптацией для смартфона Кастомная анимация -- значит анимация не как задала система, как я захотел.
>>682886 Как именно получают пизды от тимлидов и других начальников? Вот я неработающий анон просто хочу знать. Подходит тимлид, смотрит в код и начинает крыть хуями на весь офис, что код говно? Вызывает в курилку и говорит все лично? Как вообще?
>>683153 >Под адаптивной версткой скорее всего хотят чтобы ты запиздолил сайт на десктопе и этот же сайт, но с мобильной адаптацией для смартфона Что ты сейчас спизданул ты сам понял? Адаптивная верстка та которая на все экраны одинаковая, в ведре такого быть не может, потому хуярят дипиайи и скролвью, и даже иногда другие лейауты. Да и понятие само пошло из веба, так как для ведра оно не пришей корове хвост.
>Кастомная анимация -- значит анимация не как задала система, как я захотел. А какая может быть не дефолтная анимация листа или кнопки? Какая блять вообще анимация кнопки? Я правда не понимаю что они хотят, сраный селектор чтоб цвет поменял? Или чтоб кнопка вообще форму меняла при нажатии? Вот второе как раз не так легко.
>>683164 Возьми и загугли что такое адаптивная верстка, одинаковый блять. Ты блять настолько тупой, что мне даже говорить и крыть тебя хуями не хочется, так что просто иди нахуй. И повежливее, если хочешь, чтобы тебе что-нибудь подсказали, сука.
>>683173 Это обычная трансишн. Хули там делать. >>683177 Ты диванный подсказыватель сам не ебешь что говоришь.
>Под адаптивной версткой скорее всего хотят чтобы ты запиздолил сайт на десктопе и этот же сайт, но с мобильной адаптацией для смартфона Я андроид девелопер, какой десктопный сайт нахуй.
>>683322 Placeholder, хуйня которая должна показываться если изображения по какой-т опричине нет, для одного места может быть не одна, зависит от причины по которой нет.
>>683328 Зависимость, еще будет в наглую менять плагин грейдла на 2.0.0, а с ним фреско чет хуево работает, но я думаю это отговорка уровня бля раньше же работало!
>>683214 >Я андроид девелопер, какой десктопный сайт нахуй Талантливый человек талантлив во всем. А в тебе я сразу же вижу дилетанта, а я ведь даже не HR
>>683360 Я не думал над их задачей, просто увидел вакансию с непонятной хуйней.
На самом деле еще пол года назад попадал на их вакансию, мне позвонили, попросили акк на гитхаб или на мои сорсы, я сказал что мол не могу дать сорсы проектов так как коммерческая разработка. Сказал мол дайте тестовое, сказали перезвонят.
>>683365 >так как коммерческая разработка Так ты же уже успешен. Наверняка в этой конторе зарплата ниже, чем у тебя сейчас. Чем они тогда тебя привлекли? Просто сайт реально полный пиздец и впечатление о владельце соответствующее
>>683366 >Так ты же уже успешен. Наверняка в этой конторе зарплата ниже, чем у тебя сейчас. Чем они тогда тебя привлекли? Уверяю тебя, то что я работал на кого-то не делает меня успешным, я в таком гадюшнике работал что вспоминать страшно. Сейчас лучше конечно, но работаю напрямую на австралийца, а он просто сферический заказчик, постоянная нервотрепка и куча говна летит в тебя.
>Просто сайт реально полный пиздец и впечатление о владельце соответствующее Та хуй знает, мне главное тимлида чтоб я смог чему-то научиться.
>>683371 Да думал когда-то, джаву начал как раз для бэкенда учить, но меня практически судьба с ведром свела. А потом работу первую на ведро нашел быстрее чем на ЕЕ. По очевидным причинам.
Теперь перекатываться убивать себя же. Слишком много разношерстной хуйни. Может через пару лет и перейду на фулстек от нехуй делать, но мне и мобильная разработка нравиться, так что иос в приоритете.
>>683385 По тем что на ЕЕ очень сложно вкатится. Никому не уперся джун без опыта. А с ведром проще, апликухи меньше, да и быдлокодить можно уже чреез неделю.
>>683858 Ну оно не то чтоб неудобно, просто если хуярить напрямую с активити - то да, неудобно, так как добавилась строка. Если делать как белый человек то все ок в принципе. А вообще они могли сделать оба подхода сразу. Но может свои принципы не позволили.
Сервис периодически шлет данные в активити. Что более оптимально в плане потребления акумулятора: 1. Запаковать всю кучу данных в Intent и послать broadcast/localbroadcast. 2. Хранить все данные в static переменных в сервисе, забиндить сервис и периодически получать от сервиса broadcast сообщение о том, что пора бы ужеобновить данные.
>>683938 >Хранить все данные в static переменных в сервисе, забиндить сервис и периодически получать от сервиса broadcast сообщение о том, что пора бы ужеобновить данные. А ты ведь знаешь про лайфсайклы там всякие? Типа сервис может умереть-пересоздаться и перезаписать все статики? Да и вообще нельзя делать статики для передачи данных в таких сложных сущностях как сервис, это что-то уровня пиздеца.
>Запаковать всю кучу данных в Intent и послать broadcast/localbroadcast. Это единственный адекватный способ, можно еще про биндСервис почитать, но я сам их не юзал если честно.
А если тебе посоветуют что-то уровня оттобас, то шли их нахуй.
>>683971 > А если тебе посоветуют что-то уровня оттобас, то шли их нахуй. Ну да, лучше же навернуть сериализацию/десериализацию, чем пользоваться удобными инструментами.
>>683971 Если сервис пересоздастся - он продолжить слать данные и после того, как отправит сигнал, о том, что данные готовы я прочитаю статики внутри активити. К тому же, в процессе перехода между активити или фрагментами возникает ситуация, когда фрагмент уже загрузился, а сообщение с новыми результатами измерения от сервиса еще не пришло, в итоге пользователь видит нули вместо актуальных данных. А можно ведь в oncreate прочесть статики и показать актуальные данные, вместо нулей!
>>684072 LocalBroadcastManager хранит подписчиков также как и обычные евентбасы. В таком случае, в чем разница? В том что не используется куча бойлерплейта?
>>684078 А вдруг сервис умрет сразу после передачи сигнала? Это хуйня, тебе любой прогер скажет, даже не ведроид. Ты сам головой подумай, если бы так легко было передавать данные через статики, почему так не делают? >>684084 >>684082 Мне очень интересно узнать как вы оцениваете энергоэфективность. >>684080 Что будет если апликуха умрет во время передачи а потом запуститься? Интент же сохраниться в броадкастом. Но тут могу ошибаться.
>>684088 >А вдруг сервис умрет сразу после передачи сигнала? Т.е. на любом синхронном взаимодействии с сервисом модно ставить крест? Как жемне тггда погружать актуальные данные в ui, после пересоздания фрагмента? Можно конечно ждать,пока придет следующий intent от сервиса и показывать пользователю нули, но зачем?
>>684088 > Мне очень интересно узнать как вы оцениваете энергоэфективность. Гуглы за меня оценили > It is more efficient than sending a global broadcast through the system.
> Что будет если апликуха умрет во время передачи а потом запуститься? Интент же сохраниться в броадкастом. Хуй он там сохранится. Если нет подписчика, то бродкаст уходит в молоко. > Ты сам головой подумай, если бы так легко было передавать данные через статики, почему так не делают? Потому что индусы писали андроид, в котором куски приложения отваливаются по ходу работы? Если передавать вообще все через статики, у тебя будут прямые зависимости к классам, вместо косвенных. Да еще и статик один на весь класс.
>>684099 Я так понимаю у тебя в любом случае будет кейс когда данных нету а фрагмент нужно показать. Кешируй данные в бд или шередпреференсы и показывай необновленные тогда, чтоб нулей небыло. У тебя изначально хуевая логика работы.
>>684118 Кешировать данные в БД невозможно, пользователю не нужны неактуальные данеые измерений. Это не приложение-клиент интернет магазина. В чем хуевость логики?
>>684107 За первые два ответа спасибо, буду знать.
>Потому что индусы писали андроид, в котором куски приложения отваливаются по ходу работы? >Если передавать вообще все через статики, у тебя будут прямые зависимости к классам, вместо косвенных. Да еще и статик один на весь класс Так в этом отваливании и проблема. Потому нельзя юзать статики. Хотя если честно я не знаю как ведро чистит классы в памяти, но это как-то дохуя ненадежно, упал сервис, его обжект удалился, ты уверен что статики сохранились? Но твой вариант с синглтоном не лучше, я ж говорю, все равно что юзать класс апликейшена. Нет, оно работает, но это говнокод.
>>684128 Тогда делай по другому, при создании фрагмента или перед его созданием сам форсируй получение данных, а сервис юзай для обновления уже.
Хуевость логики в том что по твоей схеме при запуске фрагмента есть возможность не иметь данных для вывода, если это для тебя критично, то ты неверный подход используешь.
>>684140 В случае холодного старта - покажу заглушку. Окей, идея с биндером хороша. Если у меня одна активити и куча фрагментов, можно забиндить в активити и получать ссылку на сервис во фрагментах через активити, чтобы не таскать одинаковый код?
>>684131 > ты уверен что статики сохранились? Да, на то они и статики. Даже LocalBroadcastManager работает ВНЕЗАПНО через статики. > Но твой вариант с синглтоном не лучше С каким блять синглтоном. Я говорю юзать человеческий евентбас, а не поделие индусов из гугла. LocalBroadcastManager работает абсолютно так же как и EventBus или Otto. Просто хранит в СТАТИКЕ список подписчиков и вызывает их, когда нужно.
>>684142 Хуевости лргики здесь нет. Форсировать выдачу данеых не получится. Устройство отдает данные фиксированно раз в 3 секунды, оно подключается к смартфону по bluetooth. Особенность обмена данными по BT LE - медлительность.
>>684143 > чтобы не таскать одинаковый код? У тебя фрагменты могут прогрузиться раньше чем сервис. Поэтому вынеси подписку в отдельный класс и вызывай его в каждом нужном месте.
>>684152 >Форсировать выдачу данеых не получится. >Ну так вытащи их через binder тогда в onServiceConnected? А если у тебя холодный старт и данных нет? >Окей, идея с биндером хороша. Ну ты определись для себя. Форсировать значит получить данные другим путем в отличии от ожидания фидбека от сервиса.
>>684155 Дада, через биндер форсировать получится. Осталось понять вот что: как наиболее красиво получать ссылку на сервис во фрагментах. Интересно, есть ли какие элегантные способы.
>>684162 Через хуятик он работает, ты покажи мне синглтон который работает через поле а не через статикметод. >Просто хранит в СТАТИКЕ список подписчиков и вызывает их, когда нужно. Вот это я и назвал синглтоном.
>>684164 Ты запустил приложение. Активити вызвало bindService. Фрагменты прогрузились раньше чем onServiceConnected, делают getActivity.getServiceBinder и получают свой законный null. И что ты будешь делать в этом случае? >>684168 > ПОХОДУ > НО ХУЙ ЗНАЕТ Я пришел к тому, что ты неуч, который гнал на eventbus'ы не потому что нужно иметь куча POJO классов, а потому что СТАТИКИ КАК ТО ХУЙ ЗНАЮТ КАК РАБОТАЮТ.
>>684179 Сделаю бейсфрагмент с оповещением о успешности коннекта и буду наследовать все другие фрагменты? Но это как-то грубовато конечно. >Поэтому вынеси подписку в отдельный класс и вызывай его в каждом нужном месте. Тут поподробнее, что ты имеешь ввиду под подпиской? Ты хочешь просто с фрагментов биндСервис запускать а этот код вынести? Так это бессмысленно, у тебя фрагмент отобразиться раньше чем данные появятся.
>>684179 >Я пришел к тому, что ты неуч, который гнал на eventbus'ы не потому что нужно иметь куча POJO классов, а потому что СТАТИКИ КАК ТО ХУЙ ЗНАЮТ КАК РАБОТАЮТ. Все еще жду ответа чем евентбас лучше простого перекида инфы через апликейшн класс. Та же хуйня собственно.
>>684189 > Все еще жду ответа чем евентбас лучше простого перекида инфы через апликейшн класс Тем, что компоненты менее связные? И вместо прямой зависимости от текущей реализации ? extends Application, мы имеет полную абстракцию от его реализации через EventBus?
У меня тогда встречный вопрос. Чем localbroadcastmanager лучше простого перекида инфы через апликейшн класс. Та же хуйня собственно.
>>684197 >Тем, что компоненты менее связные? И вместо прямой зависимости от текущей реализации ? extends Application, мы имеет полную абстракцию от его реализации через EventBus? Такс, перед тем как буду дальше писать сразу скажу, ты явно опытнее меня, так что тут дальше будет просто объяснение мне почему так не правильно. Компоненты? Ты имеешь ввиду сабскрайберов? Я ждал ответа - никакого, нет я согласен, код будет чище и правильнее, но какая нахуй абстракция в ведроиде? Ты можешь перенести как свой БейсАпликейшн класс так и либу евент басса. Нету разницы бро, нету.
>У меня тогда встречный вопрос. Чем localbroadcastmanager лучше простого перекида инфы через апликейшн класс. Та же хуйня собственно. Я почему-то был уверен что он может сохранить бандл с данными, но видимо не может, но нужно почитать.
>>684213 > но какая нахуй абстракция в ведроиде Тут люди по DI угорают как дикие, dagger уже чуть ли не везде хотят видеть, а ты говоришь какая абстракция.
>>684197 >localbroadcastmanager лучше Так себе плюс конечно. Передает обычный бандл, в результате эти данные ты можешь юзать в онсевИнстансе. Все же часть ведроида потому и лучше с ним в симбиозе.
>>684233 Если нужно сохранять в онсейве, то можно и каким то конкретным pojo реализовать parcelable, хотя будет достаточно написать и простой implement serializable.
>>684249 Дак вы кричали что бойлеплейт бойлерплейт. А я и говорю что иногда он попросту полезен, так как ведро работает на бандлах, которые в свою очередь на парселейблах.
>>684179 Подитожим всё вышесказанное. >Фрагменты прогрузились раньше чем onServiceConnected, делают getActivity.getServiceBinder и получают свой законный null. И что ты будешь делать в этом случае?
Да похуй. Мой сервис все равно пока не отдуплился, данные будут только через 3 секунды, покажем пользователю заглушку.
Помогите господа, чет я запутался. У меня есть парселейбл объект, я его кладу в интент, с ним запускаю новое активити, там из интента достаю этот объект. А теперь мне надо передать этот объект в фрагмент который располагается в этом активити. Как это сделать по правильному?
>>684644 Слушаю, но тоже параша. Никакой сути, просто попизделки уровня > бля X просто охуенен, юзаете? > ну юзаем > вот и молодцы Все! Никакой сути, абсолютно ничего. Еще менее информативно, чем куча хипстерских статей на мвп.
>>684891 > куча хипстерских статей по мвп Фикс. androidweekly.net - мой спонсор одинаковых копипасченных статей уже второй месяц. Каждую сука неделю 5 статей, 3 по мвп, 2 по рх, которые НИЧЕМ НЕ ОТЛИЧАЮТСЯ.
Есть небольшая БД. Данные из неё модифицируются, фильтруются, а затем раздаются по запросу компонентам. Исходные данные менять нельзя. Набор фильтров/модификаторов изменяется довольно редко, так что применять их каждый раз к запросам - идея так себе. Следовательно, этот результат надо кешировать. Где лучше его хранить? В самой БД в отдельной таблице, или в каком-то другом месте?
Как правильно хранить списки объектов в Realm.io? Объекты нужно хранить по порядку, добавлять новые в конец списка и удалять старые из начала списка, если кол-во объектов в списке больше, чем N. Какой наиболее быстрый способ подсчета кол-ва объектов конкретного типа в БД?
>>685446 > Объекты нужно хранить по порядку, добавлять новые в конец списка Введи индексируемое поле - порядковый номер. Ну либо используй примарикей для порядка, если допустимо. > удалять старые из начала списка, если кол-во объектов в списке больше, чем N. Поскольку realmresult ленивый и у него нет TOP X, делаешь findallsorted(), и простым for i ... вызываешь у нужных removeFromRealm. > Какой наиболее быстрый способ подсчета кол-ва объектов конкретного типа в БД? realm.where(class).count()
>>685538 Как мне хранить список? Создать класс с полем RealmList<>? Или просто добавлять объекты в БД? >Введи индексируемое поле - порядковый номер. Ну либо используй примарикей для порядка, если допустимо. У меня в каждом объекте есть поле unix_timestamp типа long. Достаточно его обозначить как primary key? Будет ли выборка из бд по типу объекта упорядоченной (в порядке добавления объектов? Или по возрастанию первичного ключа?)
>>685563 У тебя таймстамп задает порядок? > Достаточно его обозначить как primary key Он же у тебя может повторятся, не? > Будет ли выборка из бд по типу объекта упорядоченной По умолчанию упорядочена по возрастанию примари кея. Как в обычных бд. > Создать класс с полем RealmList<>? Просто добавляешь объекты в realm.
Это твоя первая ОРМ? Работал с sqlite чистым? А с ОРМ для него?
Привет всем. Вопрос по ViewPager: В моем приложении есть 4 вкладки и 4 фрагмента, в одном из фрагментов - карта goole maps. Переключение между фрагментами сделано с помощью ViewPager.
Нормальная ли практика - сделать setOffscreenPageLimit(3); чтобы фрагменты один раз загрузились и не пересоздавались, когда юзер переключается с одного на другой?
>>685568 Timestamp не повторяются. Первая ORM. Работал только с чистым sqlite. Сейчасрешил взять realm, т.к. потребовалось кучу объектов из бд грузить, а sqlite работает медленнее и кода больше надо писать.
>>685574 Отлично! Тогда так и сделаю. Спасибо. Это будет график из 50 000 точек, который по мере скролла будет подгружаться из Realm. Надеюсь удастся сделать так, чтобы пользователь не заметил момента подгрузки очередной порции хуйни.
>>685576 > 50 000 Ты поаккуратней c количеством инстансов реалма тогда. Может вывалится в RealmOutOfMemoryException, но тут как повезет. У меня сейчас на 3к объектах с 2 строковыми полями на 15 символов нормально работает. Но вот на сранных ritmix'aх с 256мб на большом кол-ве данных с несколькими реалмами в разных потоках я такие ошибки получал. Но это еще на старой версии 0,84 было. Попробуй, будет падать, скажу что делать. Пора бы евангелистом в реалм устраиваться
Можно как-нибудь передать как параметр Set<Zhopa> в AsyncTask? Если писать AsyncTask<Set<Zhopa>, Void, Void>, идея орёт "Unchecked generics array creation for varargs parameter". Или только брать из замыкания/@SupressWarnings("unchecked")/писать новый конструктор и сохранять как поле?
>>685585 Планирую подгружать объекты для графика порциями по 3600 шт. Для карты может и до 6000 маркеров доходить.
Когда нужно вызывать realm.close()? Я так понял по одному экземпляру realm на поток? У меня сейчас в сервисе один используется, получил через Realm.getDefaultInstance() и в двух AsyncTask (для первоначальной загрузки графика и второй асинк для обновления графика - извлекает свежие данные из БД (одна, две, 10, 50 точек, как повезет).
>>685603 > Планирую подгружать объекты для графика порциями по 3600 шт. И каким образом же? > Когда нужно вызывать realm.close()? onDestory, при завершении работы с данными > Я так понял по одному экземпляру realm на поток? Да.
По использованию не очень понял, лучше еще разок перечитай док.
>>685608 Вынеси хотя бы в inner class для приличия. Анонимный это совсем пиздец какой то. Особенно учитывая, что у тебя интерфейс может отвалится раньше, чем он закончится.
>>685620 Этот AsyncTask в фоне запихивает данные в БД, так что интерфейс тут вообще ни при чём. Да и как могло бы помочь вынесение его в inner при отваливании интерфейса?
>>685624 Никак. Просто анонимный смотрится как говно. Если задача уровня fire and forget, то сделай его static class, чтобы у него не было ссылки на контекст активити, чтобы уж точно ничего не утекло.
>>685617 >И каким образом же? 1. Загружаю из базы N элементов 2. Юзер доскроллил дальше N/2 и перестал скроллить -> запускаю asynctask в котором выбираю данные у которых timestamp больше,чем у элемента под номером N-1, сортирую по возрастанию, выбираю N штук. Больше данных нет? Поднимаю соответствующий флаг и больше не пытаюсь грузить.
>>685632 > 1. Загружаю из базы N элементов Во первых. Реалобджекты привязанные к конкретному инстансу реалма нельзя передавать между тредами. Ну а во вторых, тебе для этого асинктакс не нужен. И пачками грузить тоже не нужно. Получи свой realmresult и ходи по нему.
Я тут вкатился в яву и андроид-разработку из языка с динамической типизацией. И вот что я вижу. Полагаю, тут уже были вскукареки типа моего текущего
Что, серьезно мне нужно каждый сука раз при работе со вьюхами сначала -ОБЪЯВИТЬ переменную с указанием её типа, -потом по айди закинуть в неё значение через, например, через findViewById с указанием типа для приведения (SeekBar), -в результате получаются конструкции вида: [code]LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);[/code]
Вы так и живете?
А еще onClick назначается только для activity, и никак не для вьюхи, и приходится писать длинный список switch case чтобы только для нужной вьюхи действие прописать? Как будто js и jquery прошли мимо создателей всей этой темы, это ж страшно неудобно.
>>686435 Ну, это я могу понять, да. Но почему не указать Морковь морковка = новая Морковь? Типа, если нужен объект с данными, которые автоматически создаются только в Морковь, но при этом типа Овощ?
>>686452 И толще. Ну, впрочем, я могу это понять, спасибо, пр, все объяснил. Еще нравится, что в этой хуйне из-за статической типизации IDE тебе все расскажет до мелочей, а если IDE не пиздит, то значит, и код скомпилится. Как правило.
Если вроде бы не стоит неисполняемое действие на нажатие кнопки, тогда скомпилится но покрашится
>>686426 Нет, к динамикопараше тут относятся спокойно. У нас в хате вообще ебут только ксамарино/котлинопетухов, когда они начинают громко орать.
>через findViewById с указанием типа для приведения (SeekBar) Енджой ёр аннотации.
>LinearLayout.LayoutParams lParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); В большинстве проектов, конкретно параметры лейаутов достаточно задать в XML.
>А еще onClick назначается только для activity, и никак не для вьюхи, и приходится писать длинный список switch case чтобы только для нужной вьюхи действие прописать? Читай документацию. Ты явно копирнул кусок кода со стековерплова. На каждую вьюху можно спокойно ставить свой OnClickListener. Просто многим удобнее ставить один листенер для всех вьюх активити.
>>686500 > Нет, к динамикопараше тут относятся спокойно. У нас в хате вообще ебут только ксамарино/котлинопетухов, когда они начинают громко орать. Ненавижу динамикопарашу. Ультимативное говно. Уж лучше котлином с замарином обмазываться.
>>686452 > чтобы всегда видеть тип переменной, а не пытаться его предугадат Button button1 = (Button) findViewById(R.id.button1) Мда, если Button заменить на val то конечно придется гадать тип.
>>686546 > можешь юзать любую реализацию класса Морковь Вот только 99% времени реализация одна
И все же, как мне исправить эту срань? Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build.api.transform.TransformException: java.util.zip.ZipException: duplicate entry: org/objectweb/asm/tree/AbstractInsnNode.class
>>686728 Берешь и удаляешь. Транзакцию хуячишь и в цикле удаляешь. Можешь еще распараллелить по 10к на тред, но есть возможность проебаться по оперативке.
Хочу такие вот пикчи на маркер ставить (текст задается естессно), как делать из лейаута битмапдескриптор разобрался, но как добавить к лейауту треугольник такой снизу?
>>686768 > В один поток это несколько минут удалять. Ты конечно же даже не замерял еще, да? Не занимайся хуйней преждевременными оптимизациями, когда будет лагать, тогда и возвращайся.
>>686851 Ну если разобрался как делать из лейаута, то изи мод - линеарлайаут в котором текствью и под ним вью с треугольным бэкграундом. Можно сделать свой текствью, который сам будет отрисовывать этот треугольник.
>>686426 Благодаря статической типизации и нормальной иде тебе редко придется набирать больше двух символов на клаве. Хоть и выглядит громоздко, но на java такая простыня текста пишется за секунды.
Признаюсь, лень долго копаться в гугле. Нужно кешировать на диск картинки(и выводить само собой) с последсвующей их передачей. Всегда юзал пикасо, но раньше такого не делал. Переопределяем таргет и засовываем все на диск? Просто тогда получается двухуровневый кеш, и как следить чтоб одинаковые файлы не плодились на диске?
Что-то я охуел от шаринга в ведре. Хочу просто зашарить фотку с диска и подпись, дак оно ведет себя как ебанутое, то что в гайде написано только в твитере и джимейле работает. Даже гугл+ требует костыля, с которым начинает работать фейсбук(десятки постов на стеке про то что нужно сдк юзать оказались не правы), правда текст еще не передается. Но с вк веселее всего не работает и с костылем и без, оно выдает неудачу на фазе загрузки картинки, т.е. все же находит данные просто достать не может. Может подскажете чего? Зато стандартная галерея на 4.2.1 работает как часы.
Это опять индусы виноваты? А то эти танцы с бубном выглядит как полный пиздец.
АНАНАНААНАСЫ! 2й день ябусь. Студия 2.1 превью. Во-первых Log.d("SOME",""); не пашет. Гуглил, всё пробовал, бочку делал и т.д. Во-вторых когда я загружаю данные через ретрофит я обновляю свой адаптер, но список не обновляется. @Override public void onResponse(Call<TrackingList> call, Response<TrackingList> response) { int statusCode = response.code(); for (Tracking track : response.body().getResult().getTrackings()) { trackings.add(track); Log.d("MYLOG",track.trackingNumber); } bra.notifyDataSetChanged(); Log.d("MYLOG","DataSetChanged");
>>687309 Да, я хуйню какую-то написал. Смотри, я использую универсальный имейджлоадер, все бы хорошо, но файлы сохраняются в /storage/emulated/0/Android/data/app_package/cache/uil-images/ в filepaths <cache-path path="uil-images/" name="images"/> В результате java.lang.IllegalArgumentException: Failed to find configured root that contains Сейчас сижу около 40 минут не могу понять в чем трабла.
>>687314 Пофиксил. >>687227 Ты сам пробовал его реализовать? Почему ни вк ни фейсбук не получает картинку? Даже не запускается. Пойду бубен покупать, что-то уровня колбека клавиатуры.
>>687287 Как решил-то? У меня тоже подобная хуйня была с 2.1, в итоге выяснилось, что дженимоушн, сука, не всегда подхватывает новый код. Решал так: stop > clean > run. А вообще впизду его, вон новый эмулятор шустрый тоже.
>>687668 http://developer.android.com/intl/ru/guide/topics/manifest/manifest-intro.html#perms -- а вот это что за пермишшны. Их в общем списке тоже нет, но и к сервисам они вроде не относятся. >что это пермишн гугл плей сервисов Анон, а у тебя под рукой нет списка вообще всех этих пермишшнов гугл-плей сервисов? А то я вообще нагуглить не могу, пздц. И у кого еще, кроме андройда и сервисов есть пермишшны?
>>687683 По моему раньше для пушей каждое приложение должно было заводить свой пермишен. Что бы бродкаст с пушем был приватным только этого для приложения.
Вот у нас ставится приложение из гуглоплея, которое запрашивает разрешения "Покупки в приложении" (как я понимаю, это и есть пермишшн biling) и показывает, что уже имеется разрешение "Микрофон" и "Фото/мультимедиа файлы" (очевидно, что это уже пермишшны андройда RECORD_AUDIO и READ_EXTERNAL_STORAGE). Ну и как так получается, что пермишшны сервисов гугл плей стоят в одном ряду с системными?
>>687725 А где можно подробнее почитать про создание пермишнов, анон? Нихера не гуглится даже. >>687733 Ты прав, там такого уже нет. Блин, каждый день узнаю что-то новое и интересное. У меня еще вопросик: 1. Где вообще нарыть инфу по самостоятельному созданию этих пермишшнов, ткните носом, пожалуйста. 2. Имеет ли смысл изучать и штудировать те же гугловские пермишшны или достаточно знать о существовании только системных андройдовских? 3. Какой пермишшн отвечает за >Платежная система Google Play?
Просто я вот в одну вещь никак не въеду. Вот всякие антивирусы и утилиты для безопасности, например, по сути чекают все приложения на наличие опасных системных пермишшнов, верно? На пермишшны других приложений, типа сервисов гугл, они плюют?
>>687780 >Ну если приглядеться, то он там есть :) А, блин, я просто еще не обновил приложение. Теперь да, есть и платежная система. >А вообще если глянуть в исходники андроида (список всех пермишенов) то там точно нет никакого com.android.vending.BILLING
Ну вот да, я же как раз с этого и начал, это и ввело меня в ступор и породило ряд вышеизложенных вопросов.
>>687799 Блин, анончики, помогите. У меня даже руки опускаются. Просмотрел два учебника по андройду -- нигде не нашел про создание собственных пермишшнов.
>>687842 Ну, в качестве примера, допустим, хочу написать свой антивирус. Алгоритм такой: сканирует все пермишшны во всех приложениях и показывает приложения с опасными (смс, камера, все, связанное с деньгами и т.п.). Мне же нужно будет и все вот эти гугловские тоже сканировать, нет? >В системе ты ничего ими не сделаешь. А какое у них тогда вообще практическое применение?
Не хочу тралировать, но почему не iOS? По ощущениям, новости про очередной стартап на айоси встречаются чаще, про анроид обычно вижу новости на тему "школьник написал новый вирус шифровальщик, который всё у тебя зашифрует, если ты сам его поставишь под рутом, запустишь, дашь согласие на проеб данных, сдашь все анализы". На ios все и платить привыкли, а на android жадная русня вроде меня. Или я заблуждаюсь?
>>688383 Ноуп, ошибаешься. Обычно изначальную платформу для приложения выбирают по двум критериям: 1) Основная аудитория продукта 2) На что бабла и опыта разработки хватит
Обычно у нищестартапов тупо нет денег содержать разработчиков для разработки под две нейтив платформы, отсюда и одна платформа изначально. В амурике это айфон, потому что айфонов популярнее. И да, именно поэтому реакт нейтивы и прочее взлетели, они очень хороши для 95% приложений от модных стартапов потому что это тупо хуитки для заказа услуги, где нужна менюшка и запрос через апи
>>688394 Ну а если самостоятельный апп типа калькулятора/будильника/планировщика/календаря и т.д.?
>потому что это тупо хуитки для заказа услуги, где нужна менюшка и запрос через апи Мне вообще бомбит от этого. Я вебообезьяна, и у меня такое чувство, что из-за своей упертости и нежелания вкатываться в мобдев, я упускаю ЗОЛОТЫЕ ГОРЫ.
>>688396 Веб и мобайл рынки - самые йоба сейчас, если у тебя в вебе нет ЗОЛОТЫХ ГОР, то тоже самое будет и с мобайлом. Средняя и топовая зарплаты в этих сферах примерно одинаковые.
>>688399 Да ну нахуй, мобайл с вебом сравнивать не очень корректно. Всё же, горы в вебе есть онли в определённых технологиях. А веб типа похапе, джиквери и битриксов, уже давно изучен тысячами индусов-визиткоклепателей. С мобайлом всё сложнее: мобайл пока очень сырой - это касается и платформ, и апи. Хороший показатель - свифт, который гейосникам притащили взамен обжектив си - но замены в итоге пока не получилось, и юзается и одно, и другое.
Мобайл катится в сторону веба. За последний год появилась куча говнофреймворков, от всей этой параши тошит уже. Разработка под ведро закономерно скатывается в говно и дроч фреймворков.
С того же rxjava я охуеваю. Я его вообще не изучал, но судя по коду, который здесь постят, это какое-то абсолютно неинтуитивное говно, которое понять можно только прочитав документацию. Нет, я не говорю, что читать не надо, я говорю именно о интуитивности, которая напрочь отсутствует в говнофреймворках.
>>688476 Это никакой нахуй не фреймворк, а просто либа для удобной асинхронности. Ведро один большой фремйворк, а все остальное потуги сделать его удобным.
>>688476 Ох и нравятся мне такие диванные кукаритики, ты же просто неосилятор. А насчет нативност, синтаксис rxjava слизан с java стримов, но ты видимо и про них не слышал.
>>688476 >закономерно скатывается в говно и дроч фреймворков. Как и любая прога, разве нет? >Я его вообще не изучал, но судя по коду, который здесь постят, это какое-то абсолютно неинтуитивное говно, которое понять можно только прочитав документацию. Он построен на стримах, мой товарищ с энтерпрайза который знает джаву 8 сразу распознал флетмапу.
Меня больше бесит кривость стандартной архитектуры и отсутствие адекватного стандарта в коммьюнити. Сейчас тупо каждый дрочит как хочет. Даже уже на хабру начали протекать миллионы статей про АРХИТЕКТУРУ МВП. И даже они разные.
>>688541 >Меня больше бесит кривость стандартной архитектуры и отсутствие адекватного стандарта в коммьюнити. Сейчас тупо каждый дрочит как хочет. Даже уже на хабру начали протекать миллионы статей про АРХИТЕКТУРУ МВП. И даже они разные. Будешь жрать это говноиндускую опенсосную поделку до кона своих дней.
>>688541 Ну на иосе тоже архитектурой не пахнет. Все ебашут во вьюконтроллерах, даже там же и интерфейс в коде строят. Ну и есть VIPER, который усложненный MVP
>>688804>>688811 Ой не надо тут, там те же активити, только называются ViewController (не просто контролер, а VIEW, что уже говорит о многом). Нахлебался с организацией UI и в ios и android (и в WP) как кросплатформеный разработчик.
Но имхо MVVM самый лучший вариант, когда надо вычленить общую UI логику с разных платформ.
>>688659 Ты о чем? О андроиде или о мвп? >>688804 А на ведре нельзя сделать этого? >>688811 Сомневаюсь что там архитектура из коробки. Вангую такие же толстые контроллеры как и в ведре, в которой тоже внезапно мвп из коробки, просто фрагменты и активити очень толстые презентеры.
>>683156 В конторах с большим офисом и где все официально могут штрафануть если сильно налажаешь, а так позовут и в отдельной комнате помахают пальчиком. В такой как моя могут и сказать что долбоеб, но это мои колеги а не тимлиды. Минимум негатива кстати.
Закину пару вопросов знатокам: 1.Объясните за этот йоба материал design, читанул уже пять статей. Одна вода, главная суть что все должно быть однородно и надо использовать анимации т.к. это КРУТА. Т.е. из этих двух очевидных вещей раздули и распиарили целую "философию" или я упустил какой-то сокровенный смысл. 2. Как в реальном продакшене происходит процесс разработки? Так же как в вебе, есть грубо говоря две "комманды", одна отвечает за UI и верстает psd макеты(или как вообще дизайн внедряется?), другая часть отвечает за внутреннюю логику? 3. Есть ли какие-нибудь агрегаторы идей для android прог? Написал пару примитивных апликух, без практичесокй ценности. Хочеться теперь ебануть чего-нибудь более прикладного и полезного, в связи с этим хотелось бы почитать идеи и хотелки от других мимокрокодилов и взять на заметку пару интересных.
Сап, сабж - не работает на планшете но работает в превьюхе изменение размера изображений путем нижеприведенныз махинаций в ImageButton и Button: <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
>>689067 О ведре конечно же. В ведор по сравнению с гейосом все портит блядская асинхронность транзакций, не гарантированные хуки лайфцайлка и собственно сам цикл, которого в гейоси нет. Ну и простые штуки типа той же клавиатуры и пермишенов через жопу.
>>689124 1) Хуйня на постном асле, распиаренная что бы ведроид не выглядел как говно, а еще что бы ведромакаки могли ебаться с анимациями пока они ебутся с анимациями, пока ебутся с совместимостью. 2) По разному, зависит от объемов проекта, я чеснтно гворя не видел что бы формально разделяли верстальщиков и тех кто пишет логику, возможно в команде договаривается вася, который блюет от верстки, с петей, который мудак и не умеет в базы данных и нетворкинг, и за всем этим следит санек который пытается держать проект оттестированным и поддерживаемым. Дизайн опять же зависит от конторы, объебосы кидают тебе в ебало psdшиник, еще большие мудаки кидают png, четкие пацаны кидают в скетче и если ты не на маке, то смотришь через веб в зеплине. 3) Добро пожаловать, снова.
Что за ебаная хуйня Создаю linearLayout програмно; LinearLayout layout = new LinearLayout(getApplicationContext()); setContentView(layout, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
добавляю туда обычную кнопку. final Button button = new Button(this); button.setText("Text"); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.RIGHT; button.setLayoutParams(params);
И, сука, оно мне создает лайоут, который врапит контент, а не заполняет родителя. Родитель я так понимаю windowsManager, но какого хуя если я задекларирую этот лайоут в xml и укажу MATCH_PARENT оно сделает как надо, а если создам программно то оно хуями обкладывает и создает лайоут по размеру кнопки? Пробовал уже в setContentView разные варианты и ViewGroup.LayoutParams и WindowManager.LayoutParams и LinearLayout.LayoutParams и нихуя не работает как мне нужно. Вопрос целесообразности оставим за кадром, почему машина пидор не слушается?
Как палить, почему активность течет. Причем она течет только на далвике, на арте все вычищается. В дампе прямве ссылки только во вьюхах и this$0. Leak canary молчит.
Аноны, а есть какие-нибудь бесплатные аналоги Genymotion, с подобным функционалом (имитация вызова, например), который заблочен в бесплатной версии дженимоушна? Может, юзает кто?
Сап, сабж: один FrameLayot должен перекрывать другой RelativeLayout, а он, сука такая, наоборот под ним ( по слою ) находится. Как сделать эту шлюху работать как я хочу ?
>>689699 Ну я думаю нужно скопировать файл в котором релм сейчас, а потом перекинуть его на экстернл сторедж, а потом нужно что бы инстанс релма брался другой
Проблема с LOGI - не отправляются ссобщения в logcat. Log level выставил verbose, фильтры отменил, приложение выставил правильно. В какую сторону копать, где проблема может быть?
>>676210 (OP) Анон, как Asynctask выполнить? Делаю стандартным обьектнейм.екзекут, но ничего не работает. Дебагер в студии отмечает "галочкой" только брейкпионты до екзекута, дальше нихуя не работает
Предыдущий тред тут:
https://2ch.hk/pr/res/665510.html
Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом. Ждем релиза второй версии студии со всеми плюшками(когда он уже выйдет-то?).
А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Хз что будет дальше.
5) RoboVM - идейный наследник ксамарина, а теперь уже и его часть но на Java. Менее популярен, так как моложе. Куплен Microsoft. Вот он точно RIP.
Отдельного упоминания стоят:
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.
Привет клиент-серверка.
Пишите в треде что добавить.