Двач.hk не отвечает.
Вы видите копию треда, сохраненную 13 июня 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
14 Кб, 604x453
Разработка под Android тред №19 # OP #743301 В конец треда | Веб
Продолжаем изучать замысловатые переплетения лайфсайкла фрагментов.

Предыдущий тред тут:
https://2ch.hk/pr/res/726626.html (М)

Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом.

А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Теперь есть бесплатная версия.
5) BugVM (RIP RoboVM) - идейный наследник ксамарина, а теперь уже и его часть но на Java. Учитывая что Microsoft убила RoboVM, встречаем опенсорсный BugVM.

Отдельного упоминания стоят:
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.
Привет клиент-серверка.

Пишите в треде что добавить.
#2 #743306
Пик нравился больше на прошлом треде :)
>>743307
#3 #743307
>>743306
Мне тоже, но у меня плохо получается находить такие.
#4 #743313
>>743290
Спасибо, посмотрел. Я 19+, а NEW_DOCUMENT флаг 21+, вроде оно почти то же самое, что NEW_TASK.
#5 #743315
>>743301 (OP)
Хватит плодить говнокодеров.
Добавь про принципы SOLID, MVP, MVC, MVVN паттерны а также книгу Блоха Effective Java.
#6 #743319
>>743315
Как будто шапку кто-то читает.
>>743322
#7 #743322
>>743319
Не поверишь, читаем :D
60 Кб, 459x497
#8 #743329
>>743315

> Android 2016


> книгу Блоха Effective Java


> Java

>>743331>>743332
#10 #743332
>>743329
Отсоси
#11 #743336
>>743315

>Хватит плодить говнокодеров.


Ты так говоришь будто бы от меня или тебя что-то зависит. Я все время натыкаюсь на пликухи где у апликейшн класса или активити пишется паблик статик метод гетКонтекст и потом юзается внутри разных модулей.

>SOLID, MVP, MVC, MVVN


Как-то ты немного хуево приоритеты расствил.
Солид еще ладно, но это как мантра.

>MVP, MVC, MVVN


Сейчас в каждой второй статье этого говна навалом.

>книгу Блоха Effective Java


Давай тогда еще паттерны Gof, и еще кучу всего из мира программирования.
#12 #743342
>>743336

> где у апликейшн класса пишется паблик статик метод гетКонтекст


И как же по другому получить контекст приложения из статик мест? Можно конечно сделать ехал синглтон через синглтон с DI, но я на это дохуя времени потрачу.
>>743351>>743372
#13 #743345
>>743336

> у апликейшн класса пишется паблик статик метод гетКонтекс


Ничего плохого в этом нет, в iOS такое метод есть по умолчанию (UIApplication.sharedApplication)
>>743357
#14 #743347
>>743336
Не надо у быдлоты ложное впечатление простоты программирования, и андроид разработки в частности создавать. Пишем все сюда, и GOF, и Java Concurrency in practice. Также можно добавить Макконелла, т-ща Фаулера. А то потом это говно начитается стартандроида, насоздает за полгода неподдерживаемое говно и тебе на новом месте работы приходится его расхлебывать.
>>743369
#15 #743349
>>743301 (OP)
Про фрагменты писать в ходе современных дискуссий аж в самой шапке моветон
https://corner.squareup.com/2014/10/advocating-against-android-fragments.html
>>743355
#16 #743351
>>743342
Но ты же понимаешь что это говноподход?
>>743354>>743358
#17 #743354
>>743351
Щито поделать, меня ебут по срокам, а не по качеству.
>>743366
#18 #743355
>>743349
Возвращаясь к теме меня-мудака и кучи фаргментов, после баттернайфа стало получше, спасибо. Что еще можно сделать и нужно ли юзать Glide.clear(%imageViewName%); в onDestroyView ?
#19 #743357
>>743345
В жопу, покажи мне хоть одно адекватное приложение с таким подходом. Почему гуглы пилять передачу контекста аргументами, а ты такой дохуя умный решил пиздануть статик переменной?
#20 #743358
>>743351
Если пофилософствовать то в этом говне Google виноваты в частности, нахера было God Object создавать такой. После частичного изучения IOS возникло впечатление, что там меньше индусов к Api подпускали.
#21 #743366
>>743354
Шли в жопу свою работу если так дела обстоят
#22 #743367
>>743357
Ты не маняврируй, а факты давай почему нельзя использовать.
>>743375
#23 #743369
>>743347

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


Так всегда, правда я и в своем коде не уверен. Но пытаюсь писать без брейнфака.

>Java Concurrency in practice


Ну это ты уже тралишь. Явно лишнее. Хотя может понадобится на каких-то своих йобавелосипедах. Но тогда еще и литературу по с++ добавить можно.
>>743389
#24 #743371
>>743357
Гугловцы и провайдеры и async-таски используют и на java пишут,
но мы то знаем что это параша.
>>743375
#25 #743372
>>743342

>И как же по другому получить контекст приложения из статик мест?


Я тебе уже отписал на сообщение, но потом понял что меня смутило, каких нахуй статик мест? Я даже не помню чтоб у меня такие были. Статик методы только для генерации статик данных и всяких фабрик использую, ну еще всякие утилсы.
#26 #743375
>>743367
Потому что ты говно пишешь, которое работает только из-за того что аппликейшн класс это синглтон.

>>743371
Не такая параша как статический гетконтекст.
>>743379
#27 #743377
>>743357

> покажи мне хоть одно адекватное приложение с таким подходом


Ой, нашел.
https://github.com/DrKLO/Telegram/blob/06473773a6f415c23fbd93d51996393b7e3ea626/TMessagesProj/src/main/java/org/telegram/messenger/ApplicationLoader.java

> public static volatile Context applicationContext;

>>743380>>743383
#28 #743379
>>743375

> Ты не маняврируй, а факты давай почему нельзя использовать.

>>743381
#29 #743380
>>743377
телеграм - не адекватное приложение
#30 #743381
>>743379
Вопрос из разряда почему нельзя называть переменные с большой буквы.
>>743386>>743396
#31 #743383
>>743377
Будь тоньше.
А если ты и вправду думаешь что это хороший пример, то самое время вытаскивать голову из жопы.
#32 #743386
>>743381
На вопрос отвечай.
>>743388
#33 #743388
>>743386
Уже ответил два поста придурок.
#34 #743389
>>743369
Хотя бы базовые принципы должны все знать, что такое mutex, синхронизация. Типы ссылок (сильные, слабые, атомик...). Синхронайзд методы, эксекуторы. Это все на практике не раз мной использовалось. На одних асинк тасках и интент сервисах без знания основ далеко не уедешь.
>>743398
1758 Кб, 331x197
#35 #743396
>>743381

> Вопрос из разряда почему нельзя называть переменные с большой буквы.


Значит ты признаешь себя безпруфным-кукаретиком,
который "где-то что-то слышал", но так и не понял почему?

другой-анон
>>743403
#36 #743398
>>743389
Ну хуй знает, тот же атомик сам по себе костыль. В джаве во всяком случае.
А так из перечисленного это основы, а в книге вангую начинабтся семафоры и пошло поехало.

Для обычных апликух я даже хз зачем это юзать.
>>743401>>743405
#37 #743400
Да, к слову, какие моменты помимо работы с битмапами через Glide могут заметно сократить использование оперативки ?
#38 #743401
>>743398
А потом 95% херачат в коде handler в виде анонимного внутреннего класса. Чем хуево это, думаю не стоит объяснять?
>>743418>>743420
#39 #743403
>>743396
Вы какие-то дауны. Нет правда, тебе самом логика не подсказывает что делать статик геттер для поля которое без самого экземпляра класса не существует неправильно?
Этот трюк работает только с апликейшн который синглтон.
Но с таким успехом можно педалить методы и в активити, и вызывать из только внутри адаптеров на этих активити.
Оно сработает, но за такое в лицо плевать нужно.
>>743430>>743954
#40 #743405
>>743398
Atomic не костыль а вполне себе употребимая вещь в определенных ситуациях http://stackoverflow.com/questions/3964211/when-to-use-atomicreference-in-java
>>743426
#41 #743409
Кстати говнокодерство прогера конкретного прямо пропорционально количеству AsyncTask использованных в коде приложения
>>743957
#42 #743418
>>743401
правильное использование Bitmap, в том числе не использование оперативки для размещения изображения. Использование библиотеки андроида, там почти всё есть. В крайнем случае можно на c++ вынести обработку, нативная память не учитывается
#43 #743420
>>743401
Ты про андроид хендлер сейчас?

Ты про то что будет ссылка на парент класс?
На самом деле озадачил, всегда хуярил андроид хендлеры как анонимные.
>>743433
#44 #743426
>>743405
Понял, но я вообще говорил о атомиинтеджерах и тд.
#45 #743430
>>743403

> Но с таким успехом можно педалить методы и в активити


Во первых, хули ты сваливаешь все в один котел, мы с тобой говорим конкретно про Application.

> без самого экземпляра класса не существует неправильно?


Во вторых ты видимо не вкурсе, что
1) На все приложение есть только ОДИН экземпляр Application
2) Он создается один раз и не разрушается никогда (на него есть статические ссылки даже внутри Android)
3) Его метод onCreate(...) вызывается ВСЕГДА до создания любых активитей/провайдеров/ресиверов
>>743434>>743436
#46 #743433
>>743420
Про них.
Любой внутренний не статик класс содержит неявную ссылку на внешний класс. В результате получаются мемори лики. Кстати любители ещё часто асинхронный таски хуячить в виде анонимных внутренних классов любят
>>743439
#47 #743434
>>743430
Ты такой долбоеб что мне даже впадло тебе что-то писать.

Вот ты умудрился поумничать, но не прочитал то что пишу я. Похуй что тут я назвал сингтоном сингл энтити.

>Этот трюк работает только с апликейшн который синглтон.



Но также можно делать с активити, один в один, если юзать геттер в элементах которые отвечают только этому активити(мы так и делаем когда передаем его через конструктор но нахуй это нам, у нас же есть статик геттеры)
>>743446
#48 #743436
>>743430
Не пизди друг. Если у тебя в приложении например активити создаётся в отдельном процессе, то для неё отдельный новый экземпляр аппликейшена создаётся. Соответственно правильнее говорить создаётся один аппликейшена для каждого процесса. Нубье суда, ещё и пальцы гнет.
>>743441>>743448
#49 #743439
>>743433
Ну я об этом написал

>Ты про то что будет ссылка на парент класс?



Получается иннер класс и внешний держат ссылки на друг друга и всегда висят в памяти?
>>743449
#50 #743441
>>743436

>Если у тебя в приложении например активити создаётся в отдельном процессе


Ой блять ты как собрался ссылками между процессами обмениваться?
Нахуй ты это вообще сюда приплел?
>>743443>>743445
#51 #743443
>>743441
Кого ебет, суть в том что это говно не работает.
#52 #743445
>>743441
Хуйню потому что написал. С процессами видно не работал, приложения визитки одни делал.
>>743450
#53 #743446
>>743434
Плиз хватит маневрировать и просто ответь на вопрос:

"Что конкретно плохого в использование статической ссылки на Application?
>>743448
#54 #743448
>>743452
#56 #743450
>>743445
Чини детектор, я делал приложения с несколькими процессами и знаю как это работает.
Так что ты меня на понт не возьмешь ;)

Еще раз, к чему ты приплел процессы?
Какая нахуй разница, сколько процессов если мне нужно допустим получить путь на локальный-кэш-каталог?
>>743454
#57 #743452
>>743448
И что?

Это ДВА РАЗНЫХ ПРОЦЕССА, они располагаются В РАЗНОЙ памяти.
Формально У КАЖДОГО процесса, есть только ОДИН экземпляр Application.
#58 #743454
>>743450
Эту Хуйню потому что написал:

"Во вторых ты видимо не вкурсе, что
1) На все приложение есть только ОДИН экземпляр Application"
>>743955
#59 #743455
Писал бы сразу про процесс а не приложение. Тут нубские читают а ты их в заблуждение вводишь
>>743457>>743480
#60 #743457
>>743455

>The Application class, or your subclass of the Application class, is instantiated before any other class when the process for your application/package is created.

776 Кб, 1510x1600
#61 #743458
>>743301 (OP)
Kotlin Koans - набор тестов для обучения
https://kotlinlang.org/docs/tutorials/koans.html (также есть плагин для Idea)

Вот сравнение одного и того кода для Android на 4 языках (да АНОН сейчас есть выбор)
https://github.com/SidneyXu/AndroidDemoIn4Languages

Вот видосики на youtube (под попкорн)
https://www.youtube.com/playlist?list=PLVe-2wcL84b8pj7VOoa-6L9Q0sDjibdoF
>>743460>>743481
#62 #743460
>>743458
Объясни людям почему нельзя тулить статик геттер в апликейшене.
>>743555
#63 #743478
Вот вам развернутый обзор почему делать статик ссылку на апликейшн контекст - удел говноделов. Правда в очень мягкой форме.
http://www.philosophicalhacker.com/2015/07/14/why-static-references-to-application-contexts-are-probably-not-the-best-idea/
>>743490
#64 #743480
>>743455
Они до тебя знать не знали, что приложение в Android может работать в нескольких процессах.
>>743483
164 Кб, 1024x819
#65 #743481
>>743458
Ой, кто-то сохранил мой пост. Держись товарищ, наше дело правое :)
#66 #743483
>>743480
То что кто-то не может во второй абзац в доке, их проблемы, нет? Но суть не поменялась, новый процесс запускает новый аппликейшн.
#67 #743490
>>743478
Всю статью можно свести к одной фразе: "Статическая ссылка на Application мешает Unit-тестированию".
Удивительно что ты сам не мог это сформулировать (может ты не пишешь тесты).

Ну и автор подтвердил что утечки памяти в таком случае это миф.
>>743494
#68 #743491
Анон, есть свободное время на работе, хочу вкатиться. Поставил студию, а прав для авд не хватает. Что делать? Как проверять свои хеллаворды?
>>743521
#69 #743494
>>743490
Никто и не говорил про утечки памяти.

И ты не понял сути, юнит тесты как следствие забивание хуи на принципы программирования - говнокод.

И нет, тесты я не пишу.
#70 #743512
Хочу попытаться сделать ровное МВП, куда смотреть? Хотел бы уже посмотреть примеры с RX и даггером по возможности.
Пока буду юзать джаву, как разберусь может и котлин испытаю.
#71 #743521
>>743491
Там в настройках нужно в бубен побить - дебаг мод включится. Вниз, вперед, вниз, вперед, a попробуй.
>>743679
#72 #743549
А из-за чего могут быть утечки памяти в RecyclerView ?
>>743560
#73 #743555
>>743460
А почему у тебя это вызывает такую трудность? Что ты пробовал и в чем возник "затор неосиляторства"?
>>743558
#74 #743558
>>743555
Как объяснить людям что так делать не правильно, когда они кричат "но работает же"?
>>743565
#75 #743560
>>743549
Если есть иннер классы делай все статиками.
>>743564>>743566
#76 #743562
>>743580
#77 #743564
>>743560
Все - в смысле ?
>>743568
#78 #743565
>>743558

> но работает же


Работает? Не трогай!
>>743573
#79 #743566
>>743560
Двачую этого чистюлю
#80 #743568
>>743564
Ну это такая хорошая практика делать все иннер классы в адаптерах и активити статиком, чтоб не было неявных ссылок.
Пользуйся и других учи.
#81 #743573
>>743565
Но это говнокод!
Просто я, учивжий жабу и прогу в целом, увидев такой подход внутри себя почувствовал негодования, я никогда не говорил что это не работает. Но я всегда буду говорить что это неправильно.
>>743592
#82 #743576
Господа, а есть тут желающие занять типовой разработкой приложения для доставки?
>>743578>>743611
#83 #743578
>>743576

>типовой разработкой


Чего?
>>743617
#84 #743580
>>743562
Если честно я сомневаюсь что это кому-то тут нужно.
>>743618
#85 #743583
А есть ли у кого-то простой пример с flow заместо фрагментов ?
#86 #743592
>>743573

> Но это говнокод!


Говно-код - это то что в огромных количествах генерируют джуны (без присмотра старших).
А уж точно не статик-геттер в Appication.
>>743596
#87 #743596
>>743592
Не знаю, но мне оно кажется вырвиглазным дерьмом.
Также можно делать статик ссылки на шаред преференсы и тд через апликейшн.
#88 #743611
>>743576
Сроки?
#89 #743617
>>743578
зубного порошка спайса
>>743619
#90 #743618
>>743580
Не Якай
>>743619
#91 #743619
>>743618
>>743617
Тролленок в треде.
#92 #743679
>>743521
А можно как-то сделать так, чтобы я кидал апк на свой кирпич, запускал его и видел, из-за какой строки оно крашится и текст ошибки?
>>743693>>743715
#93 #743693
>>743679
Используй LogCat.
Если хочешь чтобы без проводов - fabric.io
>>743715>>743731
#94 #743715
>>743693
>>743679
Я не сильно понял реквест, но дебажитьи по вайфаю можно, с фабриком это уже немного другое.
#95 #743720
Решил заюзать в одной активити RecyclerView просто потому что адаптер для него пишется несколько приятнее, чем для обычного списка. Но вдруг оказалось, что его производительность при скролле весьма хуевая.
Поискал в гугле - нашел, что нужно поставить adapter.hasStableIds(true) - действительно, теперь Recycler скроллится очень плавно, но зато глючит просто пиздец как.
К примеру notifyItemChanged приводит к удалению элемента списка.
В списке из 50 разных элементов отображаются только 2 и они чередуются.

Откатываться к обычному списку или есть решения?
>>743724
#96 #743724
>>743720

>Но вдруг оказалось, что его производительность при скролле весьма хуевая.


Ох помню спорили в скайпе что наоборот он производительнее.

Если честно я и сам не замечал хуевость работы ресайклервью, у тебя елементы убер тяжелые или что?
>>743725
#97 #743725
>>743724
CardView внутри которого ImageView, linear layout из 10 TextView.
При скролле неприятно тормозит, причем так, как будто сборщик мусора охуевает.
Переделаю завтра на обычный список - скорее всего тормозить не будет.
>>743730
#98 #743730
>>743725
Покажи код адаптера.
>>743742
#99 #743731
>>743693
Точно, нагуглил, что стактрейс можно засунут ьв логкат, а логкат сохранить! Не знал об этом раньше.
А можешь рассказать про фабрик.ио, я что-то гуглил, так и не понял, что это?
>>743734
#100 #743734
>>743731
fabric.io - когда выпустишь приложение, эта штука будет собирать багрепорты в фоне. Причем такие же подробные как и LogCat.
>>743736
#101 #743736
>>743734

>выпустишь


В смысле, через гугл плей или просто когда залью его в этот фабрик?
Я хотел отслеживать краши до релиза. Добавил метод, пожмакал его, добавил другой метод, пожмакал.
Я так понял, залитые туда приложения не приватные и доступны всем? Приватность вроде за деньги или я не понял?
>>743739
#102 #743739
>>743736
fabric.io - это всего лишь программный модуль, который ты можешь вставить в свое приложение, чтобы получать информацию о крашах.
>>744279
#104 #743751
>>743742

> инфлейты в onBindViewHolder


Это же пиздец, разве нет?
Я бы на твоем месте запихнул в айтем ресайклервью, но с wrap_content по высоте. Он хотя бы сможет переиспользовать вьюхи песен в рамках одного вьюхолдера, а не в каждом бинде их инфлейтить.
Ну и вместо setVisibility сделал бы viewTyp'ы.
>>743759>>743764
#105 #743759
>>743751
А теперь пожалуйста на человеческом языке, еще раз и помедленней.
>>743765
#106 #743764
>>743751

>запихнул в айтем ресайклервью


Не будет проблем со скроллированием внешнего RecyclrView?
>>743765
#107 #743765
>>743759
Твоя реализация будет и на обычном ListView лагать, вот че.
Не делай инфлеты, вставь recyclerView прямо в элемент списка. Его адаптер будет на каждом бинде переиспользовать свои вьюхи.
setVisibility(GONE) вызывают перерасчет разметки элемента списка, что тоже будет затормаживать скролл. Вместо него используй разные viewType и разные вьюхолдеры.
>>743764
1. RecyclerView работает через NestedScrollView, а у него проблем с вложенностью нет.
2. У него же wrap_content, там скролла не будет, он займет всю высоту своих элементов.
#108 #743767
>>743765
Ага, спасибо. Завтра сделаю - отпишусь.
#109 #743782
>>743765
Спасибо, гуру!
#110 #743793
>>743765

>setVisibility(GONE) вызывают перерасчет разметки элемента списка, что тоже будет затормаживать скролл.


Тут поподробнее.
Это как-то тупо делать две разных вью если мне допустим нужно добавить убирать какую-то мелочь. Тогда вьютайпов будет дохуя.
Да и у него рейсайклервью внезапно тоже должен вызывать перерасчет элемента списка.

>2. У него же wrap_content, там скролла не будет, он займет всю высоту своих элементов.


Вспомнил что не так давно это не работало из коробки и взлольнул.
>>743800
#111 #743800
>>743793

> Вспомнил что не так давно это не работало из коробки и взлольнул.


Но теперь то работает!

> Да и у него рейсайклервью внезапно тоже должен вызывать перерасчет элемента списка


А, ну да. А еще чет я загнул с визибилити, ведь несколько реквест лейаутов скомпануются через isLayoutRequested и отработают один раз.
>>743803
#112 #743803
>>743800
Да и я первый раз слышу что нельзя сет визибилити в итемах делать, так что хз.
Даже на стековерфлове в примерах так делают.
#113 #743840
>>743765
Всм, а как без инфлейтов то туда итемы накидать ?
>>743848
#114 #743848
>>743840
Сказали же юзай ресайклервью.
>>743852
#115 #743852
>>743848
В адаптере как итемы добавлять то ?
>>743856
#116 #743856
>>743852
У тебя есть ресайлервью с итемами в которых будет ресайлервью. Уже во вложенном ресайклервью делаешь обычный адаптер с инфлейтом в онкриейтвью, но не в онбинд.
>>743862
#117 #743862
>>743856
Это же костыль, не ? Не проще ли просто сделать проверку на то, уже был заинфлейчен или нет лэйаут ?
>>743863
#118 #743863
>>743862
Ну такое, такой проверкой ты просто будешь эмулировать работу листа, учитывая что еще нужно делать проверку сколько итемов показать, сколько спрятать.
Так что ресайклервью заюзать выглядит ровнее чем руками педалить велосипед.
>>743864
#119 #743864
>>743863
Но не ресайклервью в ресайклервью то блин, ужасно даже звучит
>>743866
#120 #743866
>>743864
Просто мозгами пошевели в чем суть листов.
Ты предлагаешь эмуляцию их работы писать руками.
19 Кб, 659x60
18 Кб, 542x88
#121 #743908
Пишет анон, который задавал вопросы про геолокацию в бэкграунде. Дописал самый простой сервис, который запрашивает LocationUpdate. Стал прописывать имя в манифесте, само имя класса MyService.kt.
Вопрос по 2-му скрину.
Вот код
http://ideone.com/rkImys
>>743937
#122 #743909
ОП, ТЫ В ГЛАЗА ДОЛБИШЬСЯ? ЕСТЬ КОНФА В ТЕЛЕГРАМЕ, ПОЧЕМУ ДО СИХ ПОР ОНА НЕ В ШАПКЕ?
telegram.me/AndroidChan
#123 #743937
>>743908
val intent = Intent(this, MyService::class.java)

P.S.
Советую убрать "abstract" перед "class MyService" иначе у тебя упадет при старте.
#124 #743942
>>743909
Она слишком унылая. Половина чата - треп о какой то хуйне.
>>743964
#125 #743954
>>743403

> Этот трюк работает только с апликейшн который синглтон.


Верно. Аппликейшен существует всегда во время работы приложения в единственном экземпляре. Так в чём проблема сделать его синглтоном?

> Но с таким успехом можно педалить методы и в активити, и вызывать из только внутри адаптеров на этих активити.


Типо ты приравнял два разных случая и это уже называется аргументом? Активити не всегда существует во время существования процесса, одной и той же активити может быть много, это потенциальная ошибка и новая условность в стиле "этот метод работает только когда существует активити, не вызывайте его в другое время, спасибо".
>>744013
#126 #743955
>>743454
Пиздец, нашёл, до чего доебаться.
#127 #743957
>>743409
Найс пердёж в лужу.
#128 #743964
>>743909
одну трахаешь,неопытную - как будто в мышиный глаз,а другую,имевшую много партнеров и часто - там член летает ,как воробей по сараю.
ну и внешний вид у них неприятный,особенно с большим пробегом)
>>743942
двачую, мимо с того чата
#129 #743966
>>743765

> setVisibility(GONE) вызывают перерасчет разметки элемента списка, что тоже будет затормаживать скролл.


После getView вернее, его аналога в RV, я им не пользовался будет перерасчитываться разметка независимо от того, вызывал ты setVisibility или нет. Это очень быстрая операция, явно не туда смотреть нужно.
#130 #744009
>>743909
Хуй знает, я в скайпе сижу, но там скорее всего нету или очень мало двачеров, а тут даже название намекает на какую-то хуйню.
#131 #744013
>>743954

>Активити не всегда существует во время существования процесса


Если юзать статик геттер для активити контекста в каком-то адаптере который заведомо в этой активити все будет работать.

>Так в чём проблема сделать его синглтоном?


В том что апликейшн тут сингл энтити. А синглтон создается при первом обращении, тут же апликейшн создается просто ДО первого вызова.

Я статью уже кидал, работать то оно работает, но это виляние жопой и говно по большому счету с точки зрения красоты кода.
>>744037>>744042
#132 #744037
>>744013

> Если юзать статик геттер для активити контекста в каком-то адаптере который заведомо в этой активити все будет работать.


А если активити 2 штуки?
Ну и про эту условность я уже говорил.

> В том что апликейшн тут сингл энтити. А синглтон создается при первом обращении


Не обязательно. С точки зрения работы вм это так, но вообще синглтон не обязан быть ленивым.

> Я статью уже кидал, работать то оно работает, но это виляние жопой и говно по большому счету с точки зрения красоты кода.


В статье тоже просто мнение-по-поводу, а не весомые аргументы. Как и у тебя. Тебе не нравится — ок.

Вот такой тебе вопрос: а если у меня есть синглтон, который работает с ресурсами (строки и картинки достает, например) или с сервисами системными, как ты предлагаешь его инициализировать? Контекст в getInstance + ленивая инициализация? Ради одной красоты придётся терять другую.
>>744041
#133 #744041
>>744037

>А если активити 2 штуки?


>Ну и про эту условность я уже говорил.


Есть такой ньюанс, но опять же я сам видел что люди такое делают.

>Не обязательно. С точки зрения работы вм это так, но вообще синглтон не обязан быть ленивым.


Вот только это не совсем синглтон.

>В статье тоже просто мнение-по-поводу, а не весомые аргументы. Как и у тебя. Тебе не нравится — ок.


Там тебе прямым текстом написали что ломает инкапсуляцию. Это не мнение, но очевидный факт, и да инкапсуляция это не про работу программы, следовательно ее можно ломать?

>Контекст в getInstance + ленивая инициализация? Ради одной красоты придётся терять другую.


Так и делал бы, андроид сдк сделан так что контекст будет откуда подтянуть.
>>744055
24 Кб, 532x421
#134 #744042
>>744013

> App.getShardInstance();


> (нарушение) красоты кода


Так и представляю:
Проект из over100 классов "джуниор-говно"-лапша-кода, а тебя ебет только статик геттер.

P.S.
Ребята вы уже заебали сратся на эту тему.
>>744045
#135 #744045
>>744042
Я вижу статики в апликейшене хуярят все ИТТ?
#136 #744055
>>744041

> Вот только это не совсем синглтон.


По сути — одно и то же. Лёгким добавлением 1 метода он превращается в псевдо-синглтон. Формально он был создан не как синглтон, но по своему функционированию он ничем не отличается.

> Там тебе прямым текстом написали что ломает инкапсуляцию. Это не мнение, но очевидный факт, и да инкапсуляция это не про работу программы, следовательно ее можно ломать?


Синглтоны тоже ломают икапсуляцию, получается?

> Так и делал бы, андроид сдк сделан так что контекст будет откуда подтянуть.


Факт в том, что для ленивой инициализации тебе придётся городить больше лишнего кода, вместо того, чтобы сделать всё просто и наслаждаться этим.
>>744060
#137 #744060
>>744055

>Синглтоны тоже ломают икапсуляцию, получается?


Синглтон так-то в какой0то мере антипатерн.

>Факт в том, что для ленивой инициализации тебе придётся городить больше лишнего кода, вместо того, чтобы сделать всё просто и наслаждаться этим.


Вся сложность будет в получении контекста на самом деле для гетинстанса(сейчас мы говорим про твой синглтон для доступа к ресурсам), но сам посмотри, если не тулить работу с ресурсами где попало читай классах отвязанных от андроид сдк, то даже кода особо больше не будет.
>>744062>>744182
#138 #744062
>>744060
Синглтону нередко требуется работать с андроид сдк, а тянуть до него контекст — лишний гемморой.
Хотя я изначально реализацию синглтона имел в виду со всеми даблчекедлоками.
#139 #744066
>>743449
Зачем делать WeakReference, когда можно просто сделать метод release(), вк отором обнулить всю хуйню, и вызвать его в onDestroy() активити, сервиса, фрагмента...
>>744070
#140 #744070
>>744066

>вызывать что-то в ондестрой


Ты псих?
>>744072>>744081
#141 #744072
>>744070
А что такого? Там же не сложная операция, а по сути одна строчка смысл которой сводится к:
mySuperHandler.activity = null; Это никак не сомжет навредить удалению, или я чего-то не выкупаю?
#142 #744081
>>744070
onDestory у активити не вызывается же только в одном случае, когда процесс полностью умирает. А если процесс умирает, то уже нечему утекать.
#143 #744092
Аноны в чем может быть проблема? http://pastebin.com/6MYsVhg4
Вот такая хуйня с картами, ничего не крашится, но они очень лагают.
#144 #744160
Возможно ли хранить sqlite базу на external storage, чтобы даже если пользователь удалить приложение и потом заново его установит можно было подгрузить из приложения эту базу, как будто ничего и не случилось?
>>744166>>744176
#145 #744166
>>744160
Сохранить можно куда угодно раньше так тестил бд, и по сути считать ее тоже можно, а потом дублировать записи из нее в свою бд.
Но вот прям создать бд с нуля по тому что у тебя в экстернал сторейдж плохая идея, да и не думаю что возможно.
>>744167>>744172
#146 #744167
>>744166
Ну и забыл добавить, что работать ты все равно будешь со своей базой а не той которая на диске, но можешь делать бекапы в нее время от времени.
#147 #744172
>>744166

> Сохранить можно куда угодно


Напоминаю про прекрасный андроид 4.4
>>744175
#148 #744175
>>744172
А что там? Признаю впадлу лезть в доку.
#149 #744176
>>744160
Анон лучше не надо, это решение из прошлого века, юзай Android Backup.

В Android 6.0 и выше придется каждый раз проверять что у тебя есть права на запись карты памяти и если их нет запрашивать явно у юзера.
И сейчас юзер может спокойно их НЕ дать или в любой момент забрать.
>>744186
63 Кб, 300x300
#150 #744182
>>744060

> Синглтон так-то в какой0то мере антипатерн.


ТЫ несёшь хуйню.
>>744188>>744569
#151 #744186
>>744176
У меня сейчас build target 22, все разрешения по умолчанию включены.
Проблема в том, что мне нужно хранить кучу всякой инфы, которая очень важна для пользователя.
И он сильно разочаруется, если после удаление и установки приложения эта инфа пропадёт.
>>744193>>744196
#152 #744188
>>744182
Ну погугли придурок, может слова именитых программистов донесут до тебя правду и ты не будешь вылазить из под шконки со своими картинками?
>>744199
#153 #744193
>>744186
Почему вы сами это в облаке не храните?

Андроид бекап дали чисто для удобства, сохранять бд в экстернал сторейдж костыль.
#154 #744196
>>744186

> build target 22


Идиотское решение.
>>744198
#155 #744198
>>744196
Это почему еще?
>>744201>>744202
#156 #744199
>>744188

> может слова именитых программистов донесут до тебя правду и ты не будешь вылазить из под шконки со своими картинками


Ох, лол. Как я с тебя проиграл.
Как думаешь, кто изображен на моей картинке?
>>744204
#157 #744201
>>744198
Наверное потому, что актуальное API — 23 ?
>>744205
#158 #744202
>>744198
В настройках вроде как можно рубануть пермишн.
>>744210>>744233
#159 #744204
>>744199
Ты какой-то ебанутый если думаешь что кто-то прогеров в лицо знает.
А синглтон антипатерном считаться может, так что увы ты идешь нахуй.
#160 #744205
>>744201
Что мне это даст?
Сейчас это приложение замечательно работает и на 4.3 и на 6.0.1.
Вырубать разрешения смысла нет.
Т.к. их всего два и без них приложение потеряет смысл.
#161 #744210
>>744202
Случайные пользователи - могут и рубануть, если вспомнят про такую функцию.
По факту - это абсолютно никому не нужно.
>>744211
#162 #744211
>>744210
Мы тебе тут рабочие решения пытемся подсказать, а не хуйню которая вылетит от действий самого юзера.

Под твои нужды нужно делать бекенд. Тем более почему тебе андроид бекап не нравится?
>>744213
#163 #744213
>>744211
Что есть Андроид Бекап?
По такому названию очень много программ есть.
>>744217
#165 #744219
>>744217
Спасибо! Пойду посмотрю как с её помощью забэкапить sqlite базу.
17 Кб, 480x360
#166 #744233
>>744202
Я на своем нексусе могу и тебе (с твоим 22) рубануть :)

Ты тогда будешь вместо карты-памяти получать заглушку.
>>744237>>744260
#167 #744237
>>744233
А я о чем говорю блять, хоть вникайте перед тем как отвечать.
>>744242
36 Кб, 498x500
#168 #744242
>>744237
Иди нахуй
>>744262
#169 #744260
>>744233
Да уж. Если пользователи увидят при запуске приложения: "Разрешить доступ к файлам, фото и мультимедиа на устройстве" - то очевидно, большинство ответят нет.
Хотя приложение ничего криминального не делает.
Про разрешение GPS - вообще молчу. Хотя не шпионит, ага.

Плохая эта идея - runtime permissions.
>>744261>>744274
#170 #744261
>>744260
Самое тупое, что для MediaStore.ACTION_IMAGE_CAPTURE тоже нужен рантаим пермишн камеры, хотя мы переходим вообще в другое приложение.
#171 #744262
>>744242
Соси хуй быдло
#172 #744274
>>744260

> Плохая эта идея - runtime permissions.


Хорошая, правильная и давно необходимая.

Нехуй запрашивать у пользователя двадцать разрешений во время установки. Запрашивай при необходимости. Когда пользователь захочет поставить фоточку на аватарку, тогда и проси соответствующее разрешение. Не даст — показывай диалог с объяснением.

Использовать API 22 — это тупиковый путь. Либо адаптируйся к изменениям, либо вон из профессии. Пиши какой-нибудь ынтырпрайз на JEE: там всё тихо и спокойно, никаких изменений.
>>744286
#173 #744279
>>743739
Анончик, спасибо, я поставил крашлитикс, и теперь могу видеть, где упала моя хуйня. Здорово!
А можно еще как-то видеть, где моя хуйня все сделала правильно и не крашнулась? Ну типа
public void onClick(View v) {
Log.d(TAG, "вызываю метод onClick");
}
Я пока вижу вариант в тоасты это засунуть. Или это в фабрике тоже можно откуда-то вывести? Я не нашел.
>>744328>>744370
#174 #744286
>>744274
Пользователи действуют иначе - им нужно, чтобы всё работало.
В моём случае невозможно запросить разрешения где-то, кроме как при старте приложения.
Т.к. оно постоянно пишет данные в базу (база может быть большая, она лежит в external storage).
Приложению важно с момента запуска знать координаты пользователя.

Всё как всегда - пользователь не должен знать, что там внутри.
>>744294
#175 #744294
>>744286
Кстати, помню, что для google maps api v2 тоже требуется Write external storage.
>>744296
#176 #744296
>>744294
С версии Google Play Services 8.3 оно больше не нужно.
Вот наверное весело людям объяснять, что разрешение на доступ к файлам нужно для кеширования карт. 99% Не поймут ничего, остальные подумают, что их хотят наебать.
#177 #744328
>>744279
Используй Timber. Подсадишь ему специальное дерево, которое скидывает логи в крашлитикс.
>>744339
#178 #744339
>>744328
В крашлитик обычные логи можно кидать?
>>744375
#179 #744370
>>744279
Сомневаюсь, тогда люди будут пидорить fabric.io запросами в вечном цикле.
Им это вряд ли всралось.
#180 #744375
>>744339
Конечно. Когда ты пишешь Timber.d/i/e/... вызывается метод log твоего дерева, и тaм можно вызвать Crashylitics.log или что там есть.
>>744384
#181 #744384
>>744375
Таки зашел в админку крашлитикса, там есть и обычные ивенты, просто всегда юзал только краши.
#182 #744512
Поменял api map key, собираю дебаг, релиз версию, запускаю - всё ок, когда апдейчу в гугл плей вылает ошибка у карт типо ключ не действительный и выводится старый ключ, как его поменять?
>>744637
#183 #744569
>>744182
разве дядя боб одобряет синглтон?
#184 #744637
>>744512
Мне кажется в google-services.json все написано за нас, у тебя версии грейдла и плагина гугловских сревисов не протухли?
116 Кб, 720x960
#185 #744721
Анон, у меня вопрос про обучение.

Всю жизнь я учил языки методом: "качаю книжку и читаю с первых страниц/смотрю туториал с первой серии". В итоге писал кучу хелловорлдов, но так толком нихуя и не выучил, ибо все дропал. Хотя интерес был, но угасал из-за монотонных заданий для нубов со всякими массивами, циклами и т.д, и т.п.

Сейчас учу ведройд методом "хочу отправку смс в приложении -- гуглю "how to sent sms android programming" и чуть ли не копирую код, попутно пытаясь понимать, что за что отвечает. Хочу еще какое-нить говно -- гуглю и копипащу". Но понимаю, конечно, не все. С Джавы порой вообще охуеваю, видя вообще доселе неизвестные методы и операторы. Но тем не менее, после небольшого пердолинга все работает и приложение получается.
Ну и вот сам вопрос: какой способ обучения лучше? Вот так вот дальше ставить себе задачи и прорываться через гугл или пересиливать себя и читать учебники от корки до корки, чтобы знать всю мат.часть. Ведь, например, если проблемой неработающей программы будет проблема с потоками какими-нибудь, я этого никогда не узнаю и не допру, потому что это сложная тема и я ее еще не изучал.
И если идти по второму пути, то каков шанс не соснуть на собеседовании, когда я почувствую себя достаточно крутым и захочу устроиться на работу?
Надеюсь на твою помощь и мудрость, анон
>>744766
#186 #744766
>>744721
Книжка по джаве + что то типа старт андроида для основ и потом читать/пробовать всякие крутые штуки
>>760815
#187 #744772
Аноны, а как по нормальному сохранять презентер при перевороте? Пихать его в ретеин фрагмент? Но тогда же получается, что сама вью управляет им, а не наоборот.
>>744776
#188 #744776
>>744772
Сохранять надо данные, а презентер пересоздавать и все
>>744855
#189 #744855
>>744776
Ну запросы то выполняются в презенторе
>>744866
#190 #744866
>>744855
1) делаешь запрос на сервер (допустим в asynctask).
Один раз при показе активити (пробрось onCreated в презентер).
2) данные загружаются -> преобразуются -> сохраняются в базу
3) asynctask кидает broadcast-message (или через ContentResolver.notifyChange)
4) обработчик (допустим cursorloader) читает данные из базы и показывает пользователю.

P.S.
Как вариант можешь отключить поворот.

Здраво рассуди "что дает пользователю поворот экрана, является ли это преимуществом?",
а не делай просто "потому что можешь" (потом придется это все поддерживать и отлаживать).
>>745296
38 Кб, 566x210
15 Кб, 446x59
#191 #744907
Что он до меня доебался?
>>744937
#192 #744937
>>744907
O_o Эти локальные переменный в начале метода "аля паскаль",
пробудили у меня воспоминания из далекого детства :)

Ты опять с импортами проебался - проверь что туда точно передается наследник
android.location.LocationListener (или скинь файл целиком).
>>744982>>745079
#193 #744942
Не мог бы кто-нибудь привести пример не текущего RecyclerView с ViewHolder, содержащим картинки, подгружаемые откуда-нибудь Glide-ом или Picasso ? Уже очень долго ебусь, никак не выходит нормально. И да, что дает следующий код :
@Override
public long getItemId(int position) {
return position;
}
Он вообще имеет смысл ?
>>744984>>744996
#194 #744955
Посоны изучаю андроид и решил купить себе планшетик для того чтоб тестировать приложения по-лучше. Посоветуйте что-то годное
>>744959>>744985
#195 #744959
>>744955
ИМХО, бери телефон, под планшеты обычно после заказа под телефон просят сделать. Или, как лучше, и то и то
>>744967
#196 #744967
>>744959
Спасибо, хорошая идея
#197 #744974
Да, к слову, при переходе на другой экран идет утечка, которую не залавливает LeakCanary.
#198 #744982
>>744937

>Эти локальные переменный в начале метода "аля паскаль"


Код конвеншн давно читал?
>>744990
#199 #744984
>>744942
Ну помогите пожалуйста :)
>>744986
#200 #744985
>>744955
Бери нексус 5х, сам взял на днях, очень рад. Саппорт ведра до 2018
>>745960>>746201
#201 #744986
>>744984
Хуй знает, юзаю пикассо самым стандартным способом, утечек не замеченно.
>>744988
#202 #744988
>>744986
Утечка идет скорее при переходе на новый экран ( я вроде заюзал flow, соответственно, юзаю unbind, удаляю все данные из адаптера даже, черт его знает что делать )
>>744989
#203 #744989
>>744988
Хотя сейчас вроде как смотрю, и просто некоторое количество переходов загрузка памяти растет, а потом останавливается на каком-то уровне. Но по-моему 60мб это пиздец как много для двух экранов с параллакс хэдерами в одном из которых есть список из 25 элементов каждый с картинкой
>>744992>>745005
#204 #744990
>>744982
По паскалю - лет 12 назад, а что?
>>744991
#205 #744991
>>744990
По жабе лол, совсем от котлина поехал?
>>744993
#206 #744992
>>744989
Флов не юзал и не планирую, так что ничем помочь не могу. А 60 метров на два экрана разве что с картой может быть.
>>745007
#207 #744993
>>744991
А при чем тут жабка? Код же на котлине,а я про паскаль писал.
>>744995
#208 #744995
>>744993
Поправь если ошибаюсь, объявлять переменные вначале метода общепринятое правило.
>>745020
#209 #744996
>>744942
Это хуйня, если у тебя не предопределенные элементы будут.
>>745004
#210 #745004
>>744996
Окей, т.е. если мы делаем список с пагинацией - то эту штуку не юзаем ?
>>745024
#211 #745005
>>744989

> 25 картинок


Ты их ресайзишь? Picasso.load.fit или Picasso.load.resize?
>>745009
#212 #745007
>>744992
Да вроде везде использую правильные контексты, ничего никуда не должно улетать лишнего.
#213 #745009
>>745005
Использую glide, но там вроде подобного нету. Пикассо просто для примера привел
>>745040
#214 #745019
Может кто посмотреть мой код ? Скину линк на гилтаб, только нужно будет добавить вас, ибо реп приватный
>>745022>>745028
#215 #745020
>>744995
Хм, может в Pascal (там это на уровне языка) или Basic.

Сейчас занят что-бы пруфы искать, но насколько я помню из "чисты код" и "рефакторинг" Фаулера:
1) лок. переменные надо как можно ближе к месту использования
У Фаулера была мысль вообще их не заводить, а получать лок. данные через отдельный метод.
2) их НЕ рекомендуется использовать повторно, особенно для др. целей.
Для этого в разных языках есть val/let - одноразовое присваивание.
>>745031
#216 #745022
>>745019
Советую тебе вырубать модули и смотреть ушла ли утечка.
Убери релейтив и посмотри, таким образом поймешь где копать.
>>745027
#217 #745024
>>745004
Наоборот, это может помочь, вот были у тебя элементы {"id": 1}, {"id": 2}, {"id": 101}, а потом стали элементы {"id": 103}, {"id": 2}, {"id": 101}, он будет уверен в закешериванных шутках и не будет играть лишних анимаций.
#218 #745027
>>745022
Там только view и есть, лол. И тестовые данные. Больше ничего. Вообще думаю запилить все по-новой чтобы не ебаться
>>745035
#219 #745028
>>745019
Ой добавь меня ^urbillgates2002ANUSli\xsvePUNCTUMAf?com
Я твое репозиторий выкачаю и перезалью на github, аночиками на радость.
#220 #745031
>>745020
Ну для начала методы нужно разбивать на методы-задачи, тогда и переменная будет сначала и не перечить словам Фаулера.
>>745036
#221 #745035
>>745027
Сука не тупи блять, вью у него только есть.
Выпили ресакйлервью и посмотри, если не будет то начинай выпиливать глайд и тд и тп.
#222 #745036
>>745031
Хороший маневр, только это никак не связано с требование принудительно описывать переменный в начале метода.

Ты кстати про второй пункт забыл.
>>745038
#223 #745038
>>745036
Не забыл, если у тебя метод решает какую-то задачу, то переиспользовать их в другой задаче внезапно не будет возможности.
Да и я боюсь сам компилятор оптимизирует работу с переменными. Тут правда я уже совсем не шарю как, но вполне возможно он определит что твоя переменная уже не используется но создалась новая. В форе он же определяет что переменная создается новая и не создает ее.
>>745132
#224 #745040
>>745009
Есть там такое точно, влючено ли по дефолту? Вряд ли
#225 #745079
>>744937
http://ideone.com/bVClzY
Блять, как же в ведре немного запутано все это. Вот под EE с джавой, мне кажется, проще.
>>745119
26 Кб, 539x290
#226 #745119
>>745079
JetBrains есть еще где тулинг подкрутить, у тебя показывается не "исходная" ошибка, а лишь следствие.

На самом деле проблема в том что у mLocationManager тип "LocationManager?", а smartcast не работает так это изменяемая переменная.
(теор. другой поток может занулить ее между проверкой и использованием).
Так что можешь спокойно убрать "if (mLocationManager != null) {"

Пофиксить ошибку можно так:
1) mLocationManager?.removeUpdates(mLocationListeners[y])
или так в твоем это случае лучше не делать
2) Вынести mLocationManager в "companion object" и пометить его "lateinit" (пик 1)

P.S.
Вопрос "зачем ты хранишь статическую ссылку на LocationManager?", а пожалуй задавать не буду.
>>746013>>746665
#227 #745132
>>745038

> вполне возможно он определит что твоя переменная уже не используется но создалась новая.


Я тебе по секрету так скажу, на уровне байткода вообще переменных нет. Есть регистры, компилятор их число минимизирует.
>>745134
#228 #745134
>>745132
По секрету себе сам скажи, я внезапно на ассемблере даже писал, но то что в памяти выделяется место под него при инициализации факт, а компилятор оптимизирует это дело.
>>745136>>745323
#229 #745136
>>745134
Мы все тут наверно в свое время писали laba1
198 Кб, 1024x768
#230 #745195
Первое правило начинающего программиста под андроид:
Не слушать людей на stackoverflow, которые предлагают освобождать ресурсы/останавливать сервис в методе onDestroy активити или фрагмента.
>>745201>>745215
#231 #745201
>>745195
Чому?
>>745208
#232 #745208
>>745201
Метод onDestroy вызывается перед тем, когда активити будет уничтожено.
Зачастую не тогда, когда мы это ожидаем (слишком поздно, с задержкой, когда система решит его вызвать).
>>745213>>745214
#233 #745213
>>745208
То есть надо высвобождать в onStop, ну не в onPause же?
>>745216
#234 #745214
>>745208
Я просто не понял был ли твой пост сарказмом.
Сам в ондестрой нихера не делаю, если уж что-то важное стопать нужно то через онпауз онрезюме.
#235 #745215
>>745195

> освобождать ресурсы


Слишком размытый термин (хотя сложно представить что можно освобождать в onDestroy)
>>745218>>745246
#236 #745216
>>745213
Он стоп и сам та еще херня.
>>745224
#237 #745218
>>745215
Всякое говно типа синглтона который хранит в себя ссылки на активити, очень тупой пример, но тем не менее.

Уже обсуждали тут как хендлером сделать мемори лик, и описывали что можно просто очищать хендлер в онДестрое.
>>745219
#238 #745219
>>745218

>что можно просто очищать хендлер в онДестрое.


обнулять всмысле
#239 #745224
>>745216
Ну и что за нахер, когда мне от сервиса анбайндится? И почему по гугловскому гайду для GoogleApiClient'a нужно конектится на старте, а отключаться в стопе
>>745230>>745231
#240 #745230
>>745224
Там же основной заеб видима ли твоя активити.
Ну и по факту только онПауз гарантированно вызывается, это можно посмотреть по схеме лайфсайкла.
>>745235
#241 #745231
>>745224
Слушая Google, а не рамдомных сосачеров.

Правильно тебе все гугл говорит, после Android 3.0 между pause/stop нет никакой разницы
(кроме случая перекрытия твоего активити, другим "полупрозрачным").
>>745235
#242 #745235
>>745231
Долбоеб чтоль?
На перечитай пост рандомного сосачера и уйди под шконарь >>745230
>>745238
#243 #745238
>>745235
Давай разберем все тобой написанное, складывается впичатление...

Что тебе конкретно не понравились?
Ты моя маленькая девочка считал себя умнее разрабов из гугла?
>>745244
#244 #745244
>>745238
Эта маленькая девочка написала все как по доке, еще и объяснила чем чревато что-то делать в онСтопе.

И уже исходя из твоих слов

>по гугловскому гайду для GoogleApiClient'a нужно конектится на старте, а отключаться в стопе


>Правильно тебе все гугл говорит, после Android 3.0 между pause/stop нет никакой разницы


Ты сам перечишь гуглам если что.
>>745254
#245 #745246
>>745215
Чаще всего встречаются "полезные советы" про AudioRecorder:
Если вызвать release в ondestroy, то не факт, что он освободится до того, как в другой активити/фрагменте его будут снова юзать. Ведь мы не знаем, когда будет вызов ondestroy. В итоге имеем рандомные краши время от времени на рандомных устройствах.
При этом куда не плюнь - в ondestroy все release вызывают.

С сервисом тоже можно наебаться - активтити закрылось, сервис еще не грохнули, потом его начали перезапускать И В ЭТОТ МОМЕНТ ГРОХНУЛИ В onDestroy.
В итоге сервис не запущен, а должен быть.

Но масштабы проблемы куда шире, это не ограничивается примером с AudioRecorder и сервисом.
>>745247>>745250
#246 #745247
>>745246
*поправка AudioRecord
#247 #745250
>>745246
Так блять, онСтарт нового активити вызывается не относительно онДестроя предыдущего.
Там вроде только между онПауз(1) - онКриейт(2) - онСтарт(2) - онРезюм(2) есть зависимость. Хотя тут мог ошибиться.
120 Кб, 943x575
#248 #745254
>>745244
Он написал

> Ну и по факту только онПауз гарантированно вызывается



Ну давай вместе посмотрим:
https://developer.android.com/intl/ru/reference/android/app/Activity.html#ActivityLifecycle

Как видишь на картинке, после Android 3.0 активити не может быть убита до вызова onStop().
Так что теперь "onStop() тоже считается гарантированно вызываемым".
>>745312
#249 #745283
Ну и что в результате? Пусть у меня есть сервис в котором музыка играет, когда мне release MediaPlayer'a вызывать.
>>745289
#250 #745289
>>745283
В случае с сервисом - смело вызывай в onDestroy.
>>745294
#251 #745294
>>745289
Окей, спасибо.
#252 #745296
>>744866
какая то хуевая архитектура, так как сохранять прогресс закгрузки при перевороте, только ретеин фрагмент и т.п.?
>>745315
#253 #745312
>>745254
Тогда смысл онСтарт онСтоп нивелируется практически.
>>745328
#254 #745315
>>745296

>хуевая архитектура


В Е Д Р О И Д
Е
Д
Р
О
И
Д
#255 #745323
>>745134
А кто не писал? Я про байткод далвика говорю.
#256 #745328
>>745312
Это атавизм из времен телефонов c 64 MB памяти я под такие разрабатывал.
>>745368
#257 #745368
>>745328
И как это помогало?
#258 #745539
видали, developer.android.com обновили
>>745546>>745589
#259 #745546
>>745539
Вообще не плохо сделали нужно признать.
Алсо, студию обновили и выслали оповещение на почту, лол. Первый раз такое вижу.
>>745551
#260 #745551
>>745546
Ну так это же обновление безопасности.
>>745565
#261 #745565
>>745551
Мне это не говорит нихуя.
sage #262 #745581
сап prкун 15 лвл, посоветуйте какойнть курс/книгу на русском по андроид-разработке, гугл выдал только 1, и он меня не устраивает
>>745677
#263 #745589
>>745539
У меня меню все на китайском теперь.
#264 #745677
>>745581
а мой ты каток, навошта гэта табе
51 Кб, 1152x905
#265 #745738
>>743301 (OP)
Аноны, подскажите, переписывал по туториалу, после все скомпилировалось, я закрыл. Сегодня открыл - и вылазит пикрелейтед. В xml совсем хуй. Подскажите пожалуйста где ошибка.
>>745745
#266 #745745
>>745738
У тебя опечатки.
>>745754
#267 #745754
>>745745
Вот что бывает когда не знаешь что пишешь, точно, спасибо.
#268 #745839
Двощик, есть примеры кода по работе с WEB API или сразу бы получения потока с онлайн-радио и работе с тегами дорожки?
#269 #745902
Сап, подскажите как переключать язык приложения с помощью спинера и чтобы сохранять выбранный язык. Перелопатил весь гугл не смог сделать так чтобы сразу менялся язык после выбора в спинере
>>745966
#270 #745960
>>744985
тоже хотел его взять
>>746011
#271 #745966
>>745902
пересоздать активити
#272 #746011
>>745960
Только покупай чехол сразу, и советую еще стекло. Задняя панель сделана из плохого пластика - царапается очень легко, прямо таки очень.

Также как купишь телефон установи програмку checkR и купи провод юсб-а на тайп-си, и проверь его этой програмкой.

Сам все эти грабли испытал на себе.
>>746026
#273 #746013
>>745119
Только сейчас дошли руки. Спасибо тебе большое.
Нужно летнюю практику в универе закрывать, взяли по знакомству на позицию ведра. А так как я котлин не учил, то вот так получается
#274 #746026
>>746011
5x говно же, дурацкий разъем от кабеля, лучше просто пятерку взять
>>746029>>746050
#275 #746029
>>746026
Ну он определенно не говно, с кабелем мозгоебка но от него есть профиты, время зарядки например.
5ка уже говно мамонта.
#276 #746050
>>746026
Поддержка ближайшие 2 года (+ preview сборки)
VS
micro USB
Что бы выбрать?..

Тем более смирись, будущие за USB-C.
Вот уже и музыку через него можно слушать на Nexus5X
https://www.indiegogo.com/projects/aero-digital-earphone-upgrade-to-hifi-music-now#/
>>746201
#277 #746053
гуру mvp, стартовать активити нужно же из презентера?
>>746084>>746118
#278 #746084
>>746053

> гуру


Нет, ну да похуй.
Я из вьюхи предпочитаю, ибо 1) там 100% есть контекст, 2) все таки запуск активности, это операция показа каких-то данных, хоть и в другом окне. Да и вдруг тебе придется заменять запуск активити на добавление фрагмента?
#279 #746118
>>746053
Не морочь себе голову: "Single responsibility principle" + "Dependency Injection".

Выносишь код навигации в отдельный класс (NavManager), а в презентер прикидываешь его через Dagger2 (или другой DIF).
В презентере уже просто дергаешь его методы.
Потроха NavManager пишешь как удобнее и проще, потом если будешь переписывать - придется менять один класс.

P.S.
Кстати в Application есть интересный метод registerActivityLifecycleCallbacks
https://developer.android.com/reference/android/app/Application.html#registerActivityLifecycleCallbacks(android.app.Application.ActivityLifecycleCallbacks)
Он может помочь "неявно связать" NavManager и твои активити (но это так для информации).

P.P.S.
Глянь MVVM, там реально гораздо меньше бойлеплейта чем в MPV/MPC.
>>746122>>746192
#280 #746122
>>746118
т.е. будет тупо класс NavManager с методами openActivity1(), ..., openActivity666() ?
>>746140
#281 #746140
>>746122
Раз ты юзаешь MVP, значит у тебя на каждом активити есть как минимум один рутовый Presenter.
Бьюсь об заклада что почти везде у тебя соответствие XXXActivity == XXXPresenter (если нет, то это легко исправить).
Значит можно вычислить активити из названия класса презентера.

В итоге можно иметь один метод:
public <T extends Presenter> void open(Class<T> presenterType, Arguments args);
вызываться он будет, к примеру navigator.open(LoginPresenter.class, ...);

или на Kotlin:
fun <refied T:Presenter> open(args: Arguments)
navigator.open<LoginPresenter>(...)
>>746144
#282 #746144
>>746140
Здесь кстати соблюдается "open/closed principle" - при добавление нового окна, не придется менять интерфейс.

Кстати если не хочешь делать через название активити можно, тупо сделать switch/case.
#283 #746175
Я тут подумал, а ведь мобильщики - считай, фронт-эндеры. Дизайнеры, но не программисты.
#284 #746192
>>746118
Это плохое решение в рамках MVP.
Если всё приложение реализовывать на MVVM, то ок.

Лучше создать в activity статичный метод create(Context context), который будет создавать её, и вызывать его из V.


> MVVM, там реально гораздо меньше бойлеплейта чем в MPV/MPC


С увеличением сложности приложения MVVM начнет ограничивать тебя, она не такая расширяемая, как MVP.
>>746223
#285 #746194
>>746175
Мобильщики вообще макаки же. Это что-то уровня программирования на пыхе или жс.
>>746208
#286 #746196
>>746175
Утешай себя этим почаще, JavaScript-макака.
#287 #746201
>>746050
>>744985

Логичнее подождать до октября, и взять уже новый Nexus.
>>746209
#288 #746208
>>746194
Нет, слишком много тонкостей системы нужно знать. Слишком много багов в сдк.
Тут реально решает опыт.
#289 #746209
>>746201

>Ждать пол года


>Брать телефон маньше чем через несколько месяцев после релиза.


Плохо, брат, плохо у тебя с логикой.
>>746219
#290 #746219
>>746209
До выхода новой модели осталось четыре месяца (пускай даже пять). Это больше, чем уже прошло со времени выпуска 5x. (Мы ведь помним, что апдейты системы будет выходить в лучшем случае два года).

Плюс, 5x имеет несколько неоднозначную начинку. Ходят слухи, что новая модель должна быть более сбалансированной.

По крайней мере я, руководствуясь такими рассуждениями, подожду до октября, а там уже решу, что брать.
>>746220>>746541
#291 #746220
>>746219

> Это больше, чем уже прошло со времени выпуска 5x


Имел в виду меньше, конечно же.
#292 #746223
>>746192

> Это плохое решение в рамках MVP.


> С увеличением сложности приложения MVVM начнет ограничивать тебя


Пруфов конечно не будет.

Я к MVVM пришел эволюционно путем от MVP,
когда устал писать кучу однотипных методов которые просто гоняли данные.
#293 #746227
Кстати, если аппарат нужен исключительно для разработки и тестирования, то Android One отлично подойдет Официально продаётся только в Африке, но легко находится на Ebay и Amazon
>>746287
#294 #746287
>>746227
не нахожу чет нигде
>>746340
#295 #746318
Стоит ли заморачиваться поначалу со всякими MVC, MVP и прочим? Я ещё и половины базовой программы не изучил, пробую писать маленький круд а уже такое ощущение, что выходит какое-то говно.
Читаю книгу Android Big Nerd's ranch (Busy Coder’s это ёбаный справочник, а не учебник).
>>746324>>746334
#296 #746324
>>746318
Блядь, ctrl+enter нажал.
Так вот, читаю и делаю оттуда упражнения, книга годная, но хотелось бы что-то ещё почитать об отделении логики обновления View и взаимодействия с моделью.
Смотрел пример TodoList приложения от гугла, ничего не могу понять. Какие есть годные материалы по данной теме?
#297 #746334
>>746318

> Я ещё и половины базовой программы не изучил


Тогда явно не стоит. Изучи основы, привыкни к SDK (он тут со своими особенностями).
Когда поймешь, что именно тебя не устраивает в стандартном подходе (и почему), тогда и можно уже в архитектурные дебри углубляться.
87 Кб, 1475x439
#298 #746340
>>746287
Ну, значит, не судьба ¯\_(ツ)_/¯
79 Кб, 540x960
#299 #746398
>>743301 (OP)
Ребят, накатил стандартную DrawerLayout активность от студии, на уже созданное приложение, как перекрасить статусбар, чтоб он не становился оранжевым как на пикрелейтед, а был прозрачным?
#300 #746401
>>746398
сделать прозрачный статусбар во всем приложение, это делается в пару строчек в теме приложения, погугли
#301 #746405
>>746398
Если сставить на новое приложение, то статус бар прозрачным становится при открытии выдвижной панели.
#302 #746419
>>746398
У тебя иконки уёбищные, да еще и стоят криво.
#303 #746541
>>746219
5 месяцев это дохуя, ждать не имеет смысла, учитывая что тут у людей зарплаты в баксах, можно взять сейчас, и еще через пол года.
Да и не забывай что только ебанутые закажет только что выпущенный телефон проебывая гарантию(а так и будет закажи ты его читерством с америки), брак штука серьезная. А если подождешь одзывов месяц то как раз будет тебе пол года. Не выебуйся в общем.
У 5х однозначная начинка, средний смартфон, чего там неоднозначного. Вот материал пластика - говною.
>>746543>>746559
#304 #746543
>>746541

> учитывая что тут у людей зарплаты в баксах, можно взять сейчас, и еще через пол года.


Как толсто.
>>746546
#305 #746546
>>746543
Чего толстого? Намек что тут никто не работает? Так нахуй тогда тебе такой дорогой телефон если у тебя денег немного? Для себя тебе китаец + эмулятор хватит на ближайший год. А там если не зацепишься то уже прости но что-то явно не так.
>>746666
#306 #746559
>>746541
Я в Европе, так что с гарантией проблем нет.

Для личного использования меня устраивает мой китайфон абсолютно. Но для разработки хочется новый (физический) девайс. Поэтому пока и не тянет менять устройство, вот и хочу посмотреть, каков будет новый нексус
>>746563
#307 #746562
Видали? Пока, groovy, здравствуй, kotlin.

http://gradle.org/blog/kotlin-meets-gradle/
>>746565
#308 #746563
>>746559

>Я в Европе, так что с гарантией проблем нет.


Если ты в европе то и телефон менять раз в пол года не проблема, не выебуйся. Всегда можно сказать - давайте подождем новую модель, учитывая как их клепают.
#309 #746565
>>746562
Радости у людей, словно они в тот градл заходят для чего-то помимо прописывания депенденсиса с примером на гитхабе.
Да-да я нуб и долбоеб, градл пушка и тд и тп, но хватит пиздеть, наверное никто ничего сложнее флейворов не делал.
>>746599
#310 #746568
>>746175
мобильщик = фронт-эндер + бак-эндер + дизайнер
>>746572
#311 #746572
>>746568
Не пали годноту быдлу.
#312 #746597
А делал кто-нибудь с Glide-ом pre-cache для списка, например ?
>>746600>>746618
#313 #746599
>>746565
Настройка CI, тестов, flavors и build variants, dexing, shrinking, apt.

Переход на котлин особой разницы не принесёт, но хоть автодополнение будет работать.
>>746616
#314 #746600
>>746597

> pre-cache для списка


Что ты имеешь в виду?
>>746604
#315 #746604
>>746600
Загрузка картинок заранее ( до того, как они непосредственно подгружаются в элемент списка )
#316 #746616
>>746599

>build variants


>dexing


>shrinking


Это ебучий шаблон который переносится из проекта в проект, как гитигнор и прогвард.
С флейворами конечно интереснее, но они не везде нужны.
С CI не приходилось еще работать.
#317 #746618
>>746597
А смысл в чем? Оно кеширует все что ты загружаешь не забываем про размер кеша. Зачем кешировать то что возможно даже на экране выводится не будет?
>>746624
#318 #746622
Хм, анонимные локальные BroadcastReceiver норм вешать?
Утечек не будет?
>>746623>>746653
#319 #746623
>>746622
Ты главное их снимать не забывай
#320 #746624
>>746618
потому что он загружает непосредственно во ViewHolder, а нужно бы заранее и из пула доставать потом. Быстрее же.
>>746634
#321 #746626
Да, к слову, заметил что у меня RecyclerView при каждом пересоздании отжирает по 10Мб. Скорее всего ( еще не тест ), как раз глайд в этом и виноват ( вернее - то, как я его использую ). Вопрос - как правильно в onBindViewHolder загружать изображение , чтобы это дерьмо не ликало ?
>>746637>>746667
#322 #746630
Подскажите пожалуйста книгу по фронт-энду для андроид.
>>746635
#323 #746634
>>746624
Оно загружает в кеш и потом отдает тебе.
Т.е. зашел на список - подгрузило из инета.
Перезашел в это список - подгрузило из кеша.
>>746652
#324 #746635
>>746630
Пахахахахах.
Что-то новое.
#325 #746637
>>746626
10 метров не так много же. И в каком смысле при каждом пересоздании? Предыдущие 10 мегабайт не очищаются или что?
>>746661
#326 #746650
А ну-ка, подскажите, анонасы. Читаю Android programming:The Big Nerd Ranch Guide. И там всплывает такая конструкция:

CrimeLab.get(this)

CrimeLab - синглтон. Метод принадлежит Activity. Собственно претензии к

public static CrimeLab get(Context context) {
if (sCrimeLab == null) {
sCrimeLab = new CrimeLab(context);
}
return sCrimeLab;
}

private CrimeLab(Context context) {
mContext = context.getApplicationContext();
mDatabase = new CrimeBaseHelper(mContext)
.getWritableDatabase();
}

Разве нет риска с таким вызовом CrimeLab.get(this) (вместо CrimeLab.get(this.getApplicationContext()) при очередном get() получить CrimeLab с протухшим содержимым?
#327 #746652
>>746634
Из памяти сначала. Если там нет, то из кэша.
#328 #746653
>>746622
Будут. Делай поля
#329 #746656
>>746650
Нет.
#330 #746659
>>746650
Упс. Разобрался.
#331 #746661
>>746637
именно
#332 #746665
>>745119
Снова я, привет.
Теперь вылетает такой exception
java.lang.RuntimeException: Unable to create service: kotlin.UninitializedPropertyAccessException: lateinit property mLocationManager has not been initialized
Caused by: kotlin.UninitializedPropertyAccessException: lateinit property mLocationManager has not been initialized
#333 #746666
>>746546
Во-первых, работает мало кто. Во-вторых, зп в долларах — у пары человек на всю доску, максимум.
#334 #746667
>>746626

>при каждом пересоздании отжирает по 10Мб


А как ты это посчитал?
>>746729
#335 #746668
>>746650
какой ужасный синглтон
#336 #746669
Сап двач! Я дико фапаю на ведроид, но пока я быдлошкольник. Когда вырасту, я хочу стать таким же труЪ как вы! Что мне почитать, чтобы начать быдлокодить?
>>746677>>746728
#337 #746677
>>746669
Предлагаю пойти нахуй.

Выпустил в гп первое приложение, когда учился в школе.
#338 #746679
>>746677
Ну, видимо, я не такая талантливая петушатина
#339 #746691
>>746677

>Выпустил в гп первое приложение, когда учился в школе.



Так вот андроид-маркет засрал своими поделиями.
>>746692>>747120
#340 #746692
>>746691

>Так вот



Так вот кто
#341 #746728
>>746669
google почитай, говорят запросы помогают. Шапка тебе нахуй дана, уебан ?
#342 #746729
>>746667
В диспетчере задач ( или его аналоге ) на планшете посмотрел
>>746741
#343 #746741
Это тебя >>746677 надо благодорить за это https://www.youtube.com/watch?v=fFIrxXvv9pQ ?

>>746729
Ну это уже просто ПИЗДОС (других слов нет), ты программист или домохозяйка?

MAT для кого сделали?
Да даже в самой Android Studio/IDEA есть этот гребанный график потребления памяти,
мог бы туда посмотреть (вызвав сначала GC) и дамп там же сделать.
#344 #746748
>>746741
да разницы то, лол, факт есть факт, утечка есть, она в recyclerView, даже более - связана с имагами
#345 #746758
>>746741
И да, в графике потребления оперативки тоже смотрю, разницы нихера
>>746785
#346 #746785
>>746758

> да разницы то, лол, факт есть факт, утечка есть


Маленький ты мой лол, ты это тоже по диспечеру удивил или тебя или в отчете MAT?

> да разницы то


Разница в том что у нас тут есть сборщик мусора, который удаляет ссылки когда ему удобнее,
а ни когда объект уже не используется.
Соответсвенно если не нажимать вручную "perform GC", то "визуально" куча уменьшаться не будет
тк он будет освобождать память только что бы сразу ее отдать новым объектам.
>>746787>>746790
#347 #746787
>>746785
т.е. ты хочешь сказать, что то, что у меня в диспетчере на планшете видно, что каждый onResume кол-во оперативы занятой приложением возрастает на 10мб может быть нормальной работой ?)
>>746793
#348 #746790
>>746785
Да, даже несмотря на это, то же самое и в студии показывается, по +10мб при onResume
#349 #746792
Привет, дроидчеры. Помогите с разработкой Android приложения. Я новичек в программировании. Выучил более менее синтаксис Java, даже написал первое кривое полноценное приложение. Возникла идея написать ещё одно, приложение, только уже взяться за него серьезно. Хочу сделать приложение типа такого: https://play.google.com/store/apps/details?id=com.ma.ld.dict.history или такого https://play.google.com/store/apps/details?id=com.history.in.pics Чтобы там также были какие-то посты и поиск по ним. Но когда я начал гуглить про локальный поиск в Android приложении, оказалось что нужна база данных SQLite по каторой и будет идти поиск. Оказывается я как долбаеб лепил какую-то хуйню без базы данных. Теперь для меня большой вопрос: КАК?? Как связать layout с базой данных и как ёё вообще использовать в таких целях. Все туториалы, которые смотрел на YouTube не расскрывают темы. Везде просто примеры телефонной книги и просто ввод и вывод данных, а мне надо чтобы каждый пост был в базе данных(да, да я довн). Так что я хз, что делать. Помогите пожалуйста советом или каким-нибудь тутором. Спасибо!
>>746800
sage #350 #746793
>>746787
Я все сказал, а ты можешь и дальше профилировать "диспетчером приложение".
>>746797
#351 #746797
>>746793
ты блять по делу способен что-нибудь сказать ? Или тебе приспичило просто попиздеть, говном облить и не сказать ничего, содержащего хоть какую-то ценность ?
#352 #746800
>>746792
Туториал гугла всё прекрасно описывает
>>746802
#353 #746802
>>746800
Линк, мб ? С нормальным прождакшн-кодом пожалуйста
>>746804
#354 #746804
>>746802

>нормальным прождакшн-кодом


:^)
>>746810
#355 #746810
>>746804
Ну а нафига мне тестовый пример с адаптером в 5 строк в котором учат делать список однострочных TextView ?
>>746814
#356 #746814
>>746810
Ты не на адаптер смотри, дурашка.
>>746815>>746817
#357 #746815
>>746814
а куда ? У меня leak в адаптере
>>746818
#358 #746817
>>746814
либо viewHolder, либо адаптер
>>746818
#359 #746818
>>746815
>>746817
Я подумал ты спрашивал про то как с базой работать а не про списки.
https://guides.codepath.com/android#adapterviews
>>746819
#360 #746819
>>746818
нет, про списки :)
#361 #746825
Блять, ресайклер тупо жрет память при скроллинге по фиксированному количеству элементов "вверх-вниз". Ему насрать на unbind-ы, ему насрать на Glide.clear(), ему насрать на все. Он, сука, просто жрет оперативку и не выплевывает обратно
>>746834>>746846
#362 #746834
>>746825
use listview, luk
>>746838
#363 #746836
>>746398
Сделай полноэкранный режим, тогда статус бар не будет мешать
#364 #746838
>>746834
ресайклер больше нравится :) Но правда вот такие моменты пиздос ебут
#365 #746846
>>746825
А хули у меня с ним проблем нет?
>>746849
#366 #746847
Чуваки, хочу добавить в приложение написанное на Java, мини-игру. Посоветуйте, на каком движке и на каком языке её лучше делать, чтобы в дальнейшем можно было интегрировать в android приложение на написанное на Java.
>>746952
#367 #746849
>>746846
Не знаю. Я сейчас покопался в коде чувака, либу которого использую ( для хэдеров, футеров, удобной имплементации холдеров и прослушки клика ) и понял, где может быть собака зарыта.
Этот человек ставит онКлики на itemView и не убирает их никогда
>>746855
#368 #746850
Блять, потеплело так новая партия ньюфань подкатила.
#369 #746854
Q
#370 #746855
>>746849
Их не может сильно много накопится, ведь после присвоения они все проебутся.
>>746858
#371 #746858
>>746855
по крайней мере при выходе в бэкграунд они могут остаться в памяти а новые - добавится потом при возвращении и onresume, если я правильно понимаю
>>746875
#372 #746859
А нужно юзать unbinder во ViewHolder-ах ?
197 Кб, 914x508
#373 #746875
>>746858
Ебать, ну точно одни нюфаги everywhere.

Ему сказали использовать тулзы для анализа, нет он сидит и фантазирует.
>>746929
#374 #746929
>>746875
а существует ли место где сидят гуру ведроида?
>>746932>>746946
#375 #746932
>>746929
А че, не видно что-ли, вон гуру писал, к которому ты обращался
63 Кб, 1161x863
39 Кб, 1132x756
GOOGLE IO 2016 #376 #746946
>>746929 да они все здесь Google "отдел разработки Android"

Кстати напоминаю: до главного события Android мира осталось 2 часа.

https://events.google.com/io2016/

Ждем ободряющей речи от Сундара. Интересно чем он решил нас удивить?
Может язык платформы поменяют на Kotlin или Swift или GO?
sage #377 #746951
>>746946
Хотел подколоть и сделать скрытый текст, но вместо этого выделил :)
#378 #746952
>>746847
На хаскелле
#379 #746954
>>746946
Ну вот котлин уже в грейдле, маленькими шажками.
>>746969
#380 #746962
Сап, пишу подобие аудиоплеера, но т.к. ньюфаг, не совсем понимаю как правильно это все дело организовать.

В общем главное активити представляет собой список песен, доступных для воспроизведения. При нажатии на элемент выплывает фрагмент, в котором есть кнопка play/pause и seekBar для перемотки и отображения прогресса. Помимо этого при нажатии запускается сервис (в том же процессе), в котором работает MediaPlayer (занимается непосредственно воспроизведением музыки). В этом сервисе создается второй поток, из которого я раз в секунду отправляю в активити бродкаст, в котором содержится текущая позиция(прогресс) MediaPlayer'а. Приняв в активити бродкаст, извлекаю из него позицию и задаю ее как текущий прогресс seekBar'а во фрагменте. Если хочу остановить воспроизведение из фрагмента (нажать на кнопку play/pause) или перемотать песню изменив положение seekBar'а, то использую binding вместо бродкаста и просто вызываю публичную функцию для паузы/перемотки, которые прописаны в сервисе.

Норм я все организовал? Есть смутное подозрение что это немножко быдлокод, подскажите как лучше сделать.
#381 #746964
>>746962
Все аудиплееры что я видел в опенсорсе - говнокод. Статическая ссылка на забайнденный сервис, ммм.... Мне кажется лучше на сикбар просто повесить анимацию и паузить ее когда сервис скажет.
>>746983
#382 #746965
>>746946
Текстовая версия будет? А то ивенты от гугла еще более унылые, чем последние от эпла.
#383 #746969
>>746954
>>746962
Каждый раз отправлять бродкаст - это точно говнокод
>>746983
#384 #746975
Recycler-о-View-блядь пишет в очередной раз. Вроде как я более-менее улучшил ситуацию. Теперь ублюдок отжирает мегабайта по два. Пришлось вручную использовать Glide.clear в onViewRecycled, чистить абсолютно все, что глайд накэшировал при выходе в onStop
#385 #746977
>>746962

> я раз в секунду отправляю в активити бродкаст


Лучше уж у биндера колбэк дергать, не? Чтоб gc не охуевал подчищать за тобой интенты.
>>746984
#386 #746979
Ан нет, просто не вызывался по какой-то причине onDetachedFromRecyclerView, смешно, ха-ха, блядь
#387 #746983
>>746964
>>746969
А если повесить анимацию разве не получится расхождения между реальной позицией воспроизведения и отображаемой? Я стримлю музыку с вк, и вполне возможно что где-то воспроизведение будет останавливаться -> нужно это как-то учитывать, каждую секунду чекая все ли нормально. Кстати, чем грозит ссылка? Сервис у меня останавливается, если закрывается активити, что может произойти?
#388 #746984
>>746977
Т.е. запилить метод в сервисе, который будет возвращать текущий прогресс и обращаться к нему раз в секунду из активити?
>>746987
#389 #746987
>>746984
Да. Либо сделать универсальный коллбэк, который будет иметь onPlayStart, onPlayPause, onPlayStop, onPositionChanged, чтобы синхронизировать изменения, которые инициирует плеер, с ui.
#390 #746991
>>746987
Так и сделаю, спасибо анон )))
#391 #747079
>>746987
А если сервис в другом процессе? Как тогда подписаться.
>>747084
#392 #747084
>>747079
Хуй знает.
Но думаю через сервис прослойку. У обоих сервисов есть aidl, чтобы дергать rpc, вот они и будут друг другу эти методы дрочить. У сервиса в главном процессе будет дергать oonPlayStart(), onPlayPause(), onPlayStop(), onPositionChanged(), который будет прокидывать их в ui. У сервиса в другом процессе будут дергаться play(), seek(), pause(), stop().
>>747118
178 Кб, 662x617
Бугурты по IO #393 #747100
Ну наконец будет с кем поговорить, осталось ей только кошачьи-ушки одеть и голос по приятнее сделать.
>>747115
#394 #747115
>>747100
А что это?
>>747122
#395 #747118
>>747084

>два сервиса


Звучит как хуйня.
>>747119
#396 #747119
>>747118
Ну, ты можешь использовать бродкасты.
#397 #747120
>>746691
>>746741
Нет, приложение хоть и было хуёвым, но более-менее вменяемым. Оно до сих пор там есть, просто дело было 4.5 года назад уже.
А написал я потому что охуели нынче школьники. Сейчас миллион материалов по программированию под андроид, ссылки в оппосте, видео, миллион готовых решений. Нет, не хочу, хочу "сап посаны, я школота, накидайте мне гайдов :)))". У меня такого не было, хотя я каким-то выдающимся себя не считаю. Наоборот, по сравнению с местными я днище уже, тем более во время универа я разработку забросил.
#398 #747122
>>747115
Умный Дилдак от гугла на агдроиде конечно же.
Сможешь с ним разговаривать когда будешь садиться на него.

Еще больше изврата прямо по ссылке http://google.com/io
>>747123
#399 #747123
>>747122
А ДАВАЙЕТ ВОЗЬМЕМ ХОРОШЕЕ ОТ ТЕЛЕГРАМА И ЗАХУЯРИМ ТУДА АВТООТВЕТЫ?
#400 #747162
>>746987
Запилил коллбэк для обновления сикбара, для этого в активити создал поток, который обращается к сервису и обновляет сикбар, но почему-то код работает даже тогда, когда я выполняю обновление позиции сикбара прямо в параллельном потоке, хотя такого быть не должно, т.к. ни один поток кроме главного не имеет доступа к UI. Что я сделал не так?
>>747193
#401 #747193
>>747162

> для этого в активити создал поток


Ты уверен, что он это отдельный поток, а не хендлер на главном?
>>747433
#402 #747235
Скопировал вашу шапку в свой гайдик по джаве https://github.com/qqqlll/Java-Thread/wiki/Android

Реквесты по изменению/добавлению ссылок можете оставить здесь или на гитхабе.
#403 #747240
>>747235
Ну учитывая что там я пишу про кскамарин и джаваскрипт, то это не слишком соответствует тематике, наверное стоит почистить.
#404 #747241
>>747235
А нет, все ок, почистил, молодец.
#405 #747257
http://vk.com/softdesigneducation для тех кто хочет начать мб полезно будет
#406 #747288
>>747235
Зачем wiki pages, если все влезло бы в один readme.md?
>>747321
#407 #747321
>>747288
Там разметка удобная.
#408 #747433
>>747193
Да, я даже нашел топик с такой же ситуацией http://stackoverflow.com/questions/5161951/android-only-the-original-thread-that-created-a-view-hierarchy-can-touch-its-vi. Попытался как ОП того топика обновить текст для TextView внутри этого треда и так же получил вылет приложения а-ля "Только главный тред может работать с UI". В топике никто не объясняет почему так происходит, лишь предлагают запустить поток методом runOnUiThread что мне тащемта не нужно, ибо сикбар обновляется и так. Я конечно сделаю по-православному и запилю хендлер, ну или runOnUiThread, но хотелось бы понять что не так. Могу кинуть код метода run если что.
>>747442>>747499
#409 #747442
>>747433
пиздец, откуда вы лезите только
>>747444>>747446
#410 #747444
>>747442
Из тваеий мамки)))
#411 #747446
>>747442
Ты уж пожалуйста либо поясни что не так, либо уебывай
#412 #747499
>>747433
Потому что вьюхи это ресурс (классы) в которых у методов нет синхронизационных секций,
тк они рассчитаны на использование с одного потока.
Если ты не понимаешь чем череват многопоточный доступ к объекту, который его не поддерживает,
то иди читай "Java Concurrency in Practice".

При этом разработчик Android понадеялись на адекватность разработчиков (видимо зря) и
не стали делать проверки правильности треда в каждом методе.
>>747507
#413 #747507
>>747499
Ты кажется не понял меня, я понимаю чем чреват многопоточный доступ, я не понимаю почему seekBar является исключением и прекрасно обновляет свою позицию даже не из главного потока, хотя делать этого не должен. Потому что изменение позиции seekBar не рассматривается как изменение состояния UI? По каким-то другим причинам? В этом вопрос.
>>747508
#414 #747508
>>747507
Да при чем здесь "изменение состояния", это объект который не поддерживает многопоточный доступ - ВСЕ.
То что там что-то работает (конкретно на твоем телефоне) это просто совпадение.

Использование объекта с неправильного потока, НЕ вызывает АВТОМАТИЧЕСКИ исключение.
Тут видимо просто забыли добавить проверку (или посчитали не нужным, тк НЕадекватов как-ты единицы).
>>747511>>747513
#415 #747511
>>747508
Няша, я просто пытаюсь понять почему данное вью ведет себя неправильно в данной ситуации. Про то, что вьюхи не поддерживают многопоточный доступ и так делать низзя я тоже знаю.
#416 #747513
>>747508

>Использование объекта с неправильного потока, НЕ вызывает АВТОМАТИЧЕСКИ исключение



А разве CalledFromWrongThreadException это не то самое исключение?
>>747516
#417 #747516
>>747513
Оно не происходит автоматически, вот тут есть метод checkThread()
http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/view/ViewRootImpl.java/#6355
Его дергает вью при обновление и оно уже бросает исключение.

Соответственно если это метод не вызван перед выполнением, то у тебя все отработает.
Но это уже будет undefined behavior.
>>747518>>747526
#418 #747518
>>747516

> Но это уже будет undefined behavior


... если ты делаешь вызов с другого потока
5 Кб, 406x131
#419 #747526
>>747516
Спам-лист
#420 #747601
Есть ли резон страдать WeakReference-ами в ViewHolder ? В частности на ImageView.
>>747604
#421 #747604
>>747601
Нет, когда они отцепятся от адаптера все почистится. А так только дрочить сборщик этими референсами будешь.
>>747605>>747607
#422 #747605
>>747604
Окей, а в каких случаях его стоит использовать ?
>>747606>>747870
#423 #747606
>>747605
Здесь советовали для хендлеров, например.
>>747608
#424 #747607
>>747604
У меня просто странная ситуевина, количество занимаемой оперативы увеличивается примерно на 60кб внезависимости от того, сколько элементов в ресайклере, при триггере onPause - onResume. Не думаю, что критично, но хочется причину найти
>>747611
#425 #747608
>>747606
Вроде как некоторые кастомные вьюхи не ресайклятся самостоятельно
#426 #747611
>>747607
p.s. Возможно, что виноват flow, не так давно начал его юзать, но вроде как по исходникам он особо там не должен ничего сохранять каждый раз по-новой
#427 #747629
Да, к слову, никто не знает, как сохранить текущее состояние вьюхи с использованием flow ? Вроде как у них написано, что это происходит автоматом, но не очень на то похоже. Пока что склоняюсь к кэшированию в локальную БД ( есть список на экране, который неплохо бы в onResume восстанавливать в том же состоянии, в котором он и был ) всех данных и их состояния, но на вскидку получится довольно тяжеловесно, если учесть, что список может быть на n*10^3 позиции, а в итемах присутствует не хило так картинок и данных
>>747641
#428 #747641
>>747629
Мда, представляю какая у тебя там каша спагетти, лазанья - выбирай сам.
Видимо забота о контролирование сложностью проектов НЕ для тебя.

Но это в принципе норм для нюфагов, надеюсь только что никто это поддерживать не будет.
#429 #747649
>>747641
Нет, поддерживать это буду я, то небольшой учебный стартап. В принципе то каши и нету, и выглядит приятно вполне. Единственная проблема - вот эта вот утечка и сохранение state-ов. Со всем остальным, что есть, работать я уже давно научился.
Фактически, там получается классический набор ( по кр. мере для меня ) для клиент-серверки: rx, retrofit, flow, butterknife, ну и vk/fb/gmaps/gcm )
>>747678
#430 #747652
>>747641
Проблемы только с view-частью, там мерзкий lifecycle порой покоя не дает, все еще не привык к нему нормально :( Все думаю записаться на курсы какие-нибудь, где построют теорию вменяемую, но времени нету. Только только 11 класс заканчиваю, плюс хочу на стажировку пойти на пару месяцев куда-возьмут, или, в идеале - джуном. Благо уже даже в gplay публиковал свой "ужас". Но то был совсем бешеный пиздец, еле-еле добили до конца приложение. За три недели кое-как сделали не самый простой заказик и теперь только под своим началом что-либо клепаем
>>747678
#431 #747662
>>747641
Можешь посмотреть если хочешь, кинь сюда линк на свой гитлаб - добавлю. Только закоммичу через пару дней вменяемую версию с окончательным перекатом с фрагментов на flow
#432 #747668
Да, к слову, как можно минимизировать объем оперативы, пожираемый гугл картой из API_V2 ? А то она пиздос какая жирнявая. Просто в рот ебал.
>>747669
#433 #747669
>>747668
порядка 50 мегов хамает просто без маркеров, без нихуя
>>747809>>747814
#434 #747678
>>747649 >>747652
Хм, не хочу никого осуждать, скажу только imho: меньше -> лучше
(меньше библиотек, меньше зависимостей, меньше состояний/мутабильности, меньше кода == меньше сложность).
Чем ниже сложность - тем проще поддерживать ПО (и через год не появится желание переписать с нуля).

Тебе бы пойти куда-нибудь работать (не обязательно сразу в yandex), чтобы тебе это взрослые-авторитетные дяди объяснили.

> в onResume восстанавливать в том же состоянии, в котором он и был


Вот тут очевидно что у тебя слишком много состояний, почему так (перегруженный UI, много промежуточных стейтов)?
#435 #747679
>>747678

> Тебе бы пойти куда-нибудь работать (не обязательно сразу в yandex), чтобы тебе это взрослые-авторитетные дяди объяснили.



С чего ты взял, что везде работают взрослые авторитетные дяди?
>>747687
#436 #747687
>>747679
Относительно 11-классника, это кто угодно закончивший вуз + >2 года опыта.
#437 #747740
>>747678
Я долго думал как бы получше сделать этот экран, в итоге сделал его с RecyclerView, который уже содержит в себе хэдеры, футеры и прочее. Так что не то чтобы много состояний.
#438 #747743
>>747678
я и не нацелен на то чтобы "сразу в яндекс". Собственно от стажировки/работы джуном я просто хочу опыта, дальше скорее всего фриланс
#439 #747809
>>747669
на каком девайсе? если на каком-нибудь нексусе с 2gb оперативы, 50 отожраных метров - это норма
>>747823
#440 #747814
>>747669
на каком девайсе? если на каком-нибудь нексусе с 2gb оперативы, 50 отожраных метров - это норма
#441 #747823
>>747809
galaxy s tab
>>747845
#442 #747845
>>747823

>>3 GB RAM Memory

#443 #747870
>>747605
Практически никогда. Серьёзно. Если возникнет ситуация, когда им нужно пользоваться, — у тебя уже будет достаточно опыта и ты уже сам поймёшь.
>>747932
#444 #747932
>>747870
вроде видел как адаптер в него пихали для ресайклера, не уверен
#445 #747935
Анон аноныч подскажи совет начинающему нубу как лучше всего реализовать пользовательскую авторизацию? Отдельное активити или фрагмент? Где и как хранить логин/пароль.
>>747955
#446 #747955
>>747935
Единственно верный вариант: https://developer.android.com/reference/android/accounts/AccountManager.html

Никаких shared prefs и sqlite для хранения credentials.
>>747959>>748242
#447 #747959
>>747955

> 2016


> хранить что-то кроме куков


> не использовать OAuth2

>>747960
#448 #747960
>>747959
Не куки, а access token.
>>747999
#449 #747999
>>747960
Не куки, а пропуск в брюки.
#450 #748171
А ведет ли кто-то список всех встречающихся девайсозависимых багов? Если нет, было бы вам интересно начать вести такой в гитхабе например?
>>748177
#451 #748177
>>748171
Костылей в программе много не бывает?
>>748186
#452 #748186
>>748177
Костыли костылями, но сранный мейзу мне сейчас сбивает паддинги у текстинпутедиттекста например. С учетом того, что они явно заданы в стиле.
#453 #748242
>>747955
А в случае если нужно хранить очень много инфы пользователя ?
#454 #748356
реально ли найти работу джуну? Че то мне кажется нихуя
>>748360
#455 #748360
>>748356
Сначала иди джуном на обычный десктоп. Потом
>>748370
#456 #748370
>>748360
ты про EE? По свингам и всяким джава эфиксам вообще ничего не видел
>>748414>>748554
#457 #748414
>>748370
На Xamarin дохуя видел.
>>748491>>748555
#458 #748491
>>748414

>99 вакансий на всё снг

#459 #748554
>>748370
Дойчебанк и люксофт для дойче - куча вакансий на эту тему.
#460 #748555
>>748414
Xamarin - это как PHP, но только в мире мобильной разработки.
#461 #749112
Анон, реально вкатиться в андроид-программирование если до этого в IT не работал?
>>749132
#462 #749132
>>749112
Конечно нет, нужно быть программистом в третьем колене. Как и везде собственно.
#463 #749200
>>743301 (OP)
А почему бы не писать приложения на js? В чем подводные камни? Сразу и на яфон и под андроид.
>>749280>>749290
#464 #749237
скажите, вот собрал я в instant run приложение. деплоится конечно быстро - и это круто. Однако если посмотреть внутрености apk - там лежит несколько dex файлов(т.е. включен multidex) + instant_run.zip файл. Можно ли как-то по быстрому отключить это говно, чтобы залить в стор норм apk?
>>749281>>749400
#465 #749280
>>749200
Никаких подводных камней. Сплошные плюсы.
Я вообще думаю, что нужно Linux на JavaScript переписать: сразу же столько новых возможностей появится и коммьюнити будет больше.
#466 #749281
>>749237
Ты debug-сборку в Play отправлять собрался?
#467 #749290
>>749200
Вроде как далеко не весь функционал удобно на js писать, но то мое ИМХО, особо не вникал.
#468 #749400
>>749237
assembleRelease должен собрать нормальную сборку, но я не уверен, не пользуюсь инстант раном.
>>749423
#469 #749423
>>749400
Я всегда для релизов юзаю "генерейт сайнинг апк". Хуй знает, может это глупо, но уже привычка.
assembleRelease - юзаю чтоб sha1 посмотреть.
>>749449
#470 #749449
Пробовали уже новые плюшки? Firebase? Autolayout ConstraintLayout?

>>749423
Удобнее singningConfig прописать в градле и делать assembleRelease.
>>749554
#471 #749498
Sup! Пацаны, вот в этом видео типаня на 4ой минуте задает какие то строки, которые потом должны получаться картинками. Но они нихуя не получаются. Мб он что то еще юзает или это стандартные какие то константы в андроиде?
Просто я ньюфаг и ебусь с этой парашей уже 2 дня.
https://www.youtube.com/watch?v=1tDsf7Sw6-U
>>749670
56 Кб, 580x700
#472 #749546
ТРЕД НЕ ЧИТАЙ - СРАЗУ ЗАДАВАЙ
Надоело пилить AsyncTask в каждой Activity. Хочу такую библиотеку чтобы в одну строчку можно было указать url картинки и ид вьюшки. Недавно случайно наткнулся на Volley, но на деле там не то, что обещают. Еще увидел android-query(https://code.google.com/archive/p/android-query/), но не нашел для нее примеров использования. Знаю еще, что есть picasso, но чем-то она меня отталкивает.
А мне нужно реализовать ListView с картинкой и строками в каждом пункте (как на пике). Важный момент: адрес картинки у меня возвращается кастомным методом, указывая который в качестве аргумента конечно словит исключение.
Что посоветуете?
>>749580
#473 #749554
>>749449

>Удобнее singningConfig прописать в градле и делать assembleRelease.


Куда оно апк помещает в таком случае?
>>749680
#474 #749580
>>749546

> Что посоветуете?


Повеситься.

> Хочу такую библиотеку чтобы в одну строчку можно было указать url картинки и ид вьюшки


Glide, Picasso, Universal Image Loader
Отталкивает, не нравится — ну тогда напиши свою либу и не задавай глупых вопросов.

> адрес картинки у меня возвращается кастомным методом, указывая который в качестве аргумента конечно словит исключение


Подъезжая к вокзалу, у меня слетела шляпа. Прекрасный повод переписать по-нормальному.
#475 #749670
>>749498
Это скорее всего какие-то коды символов. Так что то там иконки тупо текстом получаться.
#476 #749680
>>749554
Там же, где и все остальные apk, в папке build.
>>749854
#477 #749854
>>749680
При генерейт сайнинг апк апк помещается в папку с апликухой.
>>749858
#478 #749858
>>749854
Неправда
>>749979
#479 #749942
Пацаны, а поясните еще за такую тему. Я пилю приложуху по погоде, используя АПИ с опенвезермапс. Так вот я хочу сделать менюшку, что бы можно было вводить название города и приложуха показывала там погоду. Единственное, что я не догоняю, это как менять АПИ, когда переходишь к другому городу? Просто я задаю АПИ строкой и из него все парсю, но хоть убей не понимаю как сделать динамическую смену АПИ во время работы приложухи.
#480 #749947
>>749942
Ты как-то странно объясняешь, может ты чего-то не понимаешь, что значbт менять API? Если ты про xyi.pizda/api/weather?city=tagil и хочешь получить в геленджике, а не тагиле, то надо просто запрашивать xyi.pizda/api/weather?city=gelendjik, никакой смены API.
>>749969
#481 #749969
>>749947
ну я не догоняю просто
тип в видосике сделал менюшку, в которой меняет город и показывает его погоду
а я не догоняю как он это делает
ведь для этого надо загонять новую АПИ
линк на видосик: https://www.youtube.com/watch?v=1tDsf7Sw6-U
#482 #749979
>>749858
Кому ты пиздишь? Апк будет в папке app.
sage #483 #749981
>>749969
Тебе уже ответили, что делать. Думать и васяновидосики за тебя смотреть никто не собирается.
>>749990
#484 #749990
>>749981
тот ответ содержал и так понятные истины
а меня интересует именно конкретный ответ
>>749992
sage #485 #749992
>>749990
Предлагаю тебе пойти нахуй.
Достаточно конкретно?
>>749999
#486 #749995
>>749969
Сделай функцию генерации урла для запроса, если поп рсотому то:
return String.format("xyi.pizda/api/weather?city=%s", cityName);
В реальных проектах это конечно не так делается.
>>749998>>749999
#487 #749998
>>749995
но ведь тогда надо будет загонять новую АПИ
просто я задаю АПИ строкой и из него все парсю
вот видосик: https://www.youtube.com/watch?v=1tDsf7Sw6-U
тип в видосике сделал менюшку, в которой меняет город и показывает его погоду
а я не догоняю как
АПИ ведь загонять придется новую
#488 #749999
>>749992
я просто попросил помощи и не получил ответ
че ты агришся, даун?
>>749995
а вот как он делает через
connection.addRequestProperty("x-api-key",
context.getString(R.string.open_weather_maps_app_id));
так можно реализовать?
>>750000>>750092
#489 #750000
>>749999
нет
#490 #750092
>>749999
Анончик, а почему ты разговариваешь как 14-летний даун-аутист?
>>750190
#491 #750190
>>750092
хз
я даже не помню, что вчера тут делал
))0
#492 #750220
>>749942
>>749969
бросай свои паршивые васяновидосы и дуй на udacity смотреть официальный курс от гугла.

Тем более, что на курсе они делают ровно тоже самое и скорее всего твой васяновидос оттуда все слизал подчистую
>>750231
#493 #750231
>>750220
Школьник иди нахуй со своим курсам, этот тред для крепки мидлов/синьеров
>>750262
#494 #750262
>>750231

> этот тред для крепки мидлов/синьеров


Эх, если бы...
#495 #750289
Какие шансы создать казуальную игру и иметь доход с рекламы в ней хотя бы тысяч десять в месяц? Насколько это реально? Хватит ли года 24/7 учебы серьезной? Пр условии, что я знаю простейшие аспекты программирования, и пару тройку программ-парсеров на андроид создавал. Знаете, просто очень хочу создать своё творение в виде игры, но мне больно смотреть на то, что многие игры, сделанные другими людьми, просто невостребованны на рынке Google Play. Это же огромная почва для грусти, когда твои потраченные часы не окупаются даже радостью людей, не то что деньгами.
>>750313>>750346
sage #496 #750313
>>750289
Если у тебя нет хотя бы $5k на рекламу, то никакх.

Стор завалин фритуплейным парашей погорло, а ведь есть еще фирмы которые зарабатывают копипастой успешних игр.
Знаю одну такую, там работают сотни "разработчиков", которые конвеером выпускают это гавно.
Google их конечно переодически банит, но их это не останавливает - больше сотни аккаунтов (и это только одна фирма).
#497 #750330
>>749942
Что в твоем понимании представляет из себя API ? Ты уверен что понимаешь значение этого слова ?
#498 #750332
Да, к слову, снова 11-класснико-блядь пишет в тред. [С надеждой в голосе] Может кто-то все-таки делал свое сохранение стэйта с использованием flow для того чтобы при проходе вверх по бэкстэку экраны оставались в том же состоянии что и вниз ?
>>750337
#499 #750337
Кто уже поюзал Firebase Database? Как в нем эффективно работать со списками? А то у меня сейчас 1к мелких объектов полностью считываются в память, а из интерфейсов только iterator по ключам есть, без случайного доступа.
Можно конечно было бы сначала считать только ключи, и ходить в DataSnapshot по этому ключу по необходимости, каждый раз десериализуя объект, но это как то звучит левачно.

>>750332
Да flow мало используется, нахуй ты его вообще брал. Тебе даже его никто не советовал здесь.
#500 #750342
>>750337
Firebase это бд, которая позволяет напрямую из андроида работать с ней без апи, я правильно понял?
>>750343
#501 #750343
>>750342
Ну как без апи, у нее есть rest api, но соль в том, что через сдк она самообновляемая. Т.е. на объект вешаешь листнер, и этот колбек отработает, как только с этим объектом что-то случится.
Да и до полноценной бд как до берлина. Фильтрация у меня чет не запахала, сортировка только по одному полю. Для серьезных проектов не подойдет, но для какого-нибудь мелкого проекта думаю сойдет.
#502 #750346
>>750289
где то была стата, что 5% разработчиков, собирают 90% прибыли, остальные сосут хуи. Вот и думай, попадешь ли ты в эти 5%
105 Кб, 1280x800
#503 #750376
>>749549 (OP)
Анончики, задаваю этот вопрос сразу в 2х тредах по C# и Java.

Есть знания в области геймдева со стороны 3D графики.
Хочу начать изучать кодинг.

И вот вопрос:
Что же будет перспективнее и более реально в соотношении время обучения/возможности на этом зарабатывать? На чем реальнее и перспективнее будет делать простые игры для мобилок?

Как вариант это уже более-менее знакомый мне Unity + C#
Либо Java + другой движок

И в чем из этих языков будет проще отстраниться от конкретно геймдева в сочетании с движком и уйти просто в кодинг, не завязанный на играх вообще?
#504 #750388
>>750337
Он оказался удобным дофига. Плюс абстракция то будет поболее, чем со фрагментами. И практически полная замена EventBus-а сервисами ( flow-овскими )
>>750460
#505 #750396
>>750337
И да, в 17 треде советовали вроде ( помню что было, точно не припомню, может и в 16 ). Принципиально иной подход, но он блять удобен и более кампактен + абстрагирован. И под mvp тот же заточен больше
>>750460
#506 #750417
Парни, мигрировал с gcm на fcm, теперь при попытке запустить приложение на устройстве вот такая ошибка. Погуглил, ничего толкового нет, пробовал переустанавливать приложение, чистить проект и ещё пару штук. Просто вот 5 минут назад билд был, а теперь нихуя. Как найти решение?

pkg: /data/local/tmp/com.huy.pesda
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

Installation failed since the APK was either not signed, or signed incorrectly.
If this is a Gradle-based project, then make sure the signing configuration is specified in the Gradle build script.
Error while Installing APK
>>750423>>750463
#507 #750423
>>750417
в translate.google.com можем ?)
>>750426
#508 #750426
>>750423
Эх, сейчас бы в 2016 на русском гуглить. Можем, конечно же.
#509 #750460
>>750388
>>750396
Что ты чешешь? Нахуярил абстракция удобнее и тд, а сам ебеться уже неделю с ним.
>>750464
#510 #750463
>>750417
Что за хуйня, недавно только мигрировались с C2DM на GCM?
>>750478
#511 #750464
>>750460
У меня по нему один вопрос неделю остается, но на крайняк сделаю кэширование в локальной бд, благо это просто + всяко оффлайн режим пилить нужно будет. В остальном же помимо state-а меня flow устраивает более чем
>>750483
#512 #750478
>>750482
#513 #750482
>>750478
Дак а профиті появились какие-то? ГСМ не закрывается хоть?
>>750484
#514 #750483
>>750464
Уже есть тысячи вариаций архитектуры мвп с активити и фрагментами, зачем нужны ноунейм фловы?
Нет на полном серьезе? Если бы это было нормальное решение коммьюнити бы уже его продвинуло, но нет.
>>750506
#515 #750484
>>750482
Стабильнее, кода меньше и прочее.
Мне-то, блять, что делать?
>>750492
#516 #750492
>>750484
так нахуй перекатываться, gcm же будет жить?
>>750493
#517 #750493
>>750492
Мне похуй, я люблю новые технологии, хочу перекатиться туда.
>>750500
#518 #750500
>>750493
Бля, это не новые технологии, я уверен их файрбейс тот же гсм.
#519 #750506
>>750483
Ну посмотри что-ли, может поймешь, когда прикинешь как это по-сравнению с фрагментами профитно.
>>750508
#520 #750508
>>750506
Коммьюнити забила хуй, мне то зачем оно?
>>750511
#521 #750511
>>750508
Ну ты же хочешь понять, зачем нужны ноунейм фловы. Мое дело сказать, твое - решат что будешь делать. Я просто говорю, что использовать flow, ИМХО, профитнее
#522 #750548
Че скажите про Constraint Layout? Как по мне хуйня для новичков, которых пугает xml, не?
>>750584
#523 #750584
>>750548
вроде в нем заебешься что-то сложное делать
>>750599
#524 #750599
>>750584
Уже полгода делаю в нем проект. Это аналог лейаута из айос. Там в принципе очень удобно, если понять, для чего он тебе. .
>>750601
#525 #750601
>>750599
Всмысле полгода? Его же только презентовали.
>>750614
#527 #750612
>>750611
кхм
#528 #750613
>>750611
То конечно хороший перекат, я люблю рекурсию, но...
#529 #750614
>>750601
Есть аналог - cassowary-layout..
#531 #760815
>>744766
Удвою.
#532 #762598
Можете по программированию под андроид накидать годных книг? Если имеются адекватные переводы, то можно и их.
Обновить тред
Двач.hk не отвечает.
Вы видите копию треда, сохраненную 13 июня 2016 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски