Это копия, сохраненная 24 марта 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Вот с помощью ViewModel и LiveData я могу создать один статический лейаут и биндить в него данные, когда они будут готовы в модели.
Но как, блять, мне создать ДИНАМИЧЕСКИЙ лейаут?
То есть мне надо по событиям из модели не просто биндить данные в готовые вьюхи, но и полностью перерисовывать лейаут.
То есть, менять/удалять/добавлять вьюхи динамически на лету, а не просто инфлейтить xml'ку.
Чтобы не запороть рейтинг на основном? Прощупать, вкатывает людям или нет?
Пока что придумал такой костыль метод:
в лейауте задавать сразу все возможные view, но управлять их видимостью программно.
Вроде это даже считается дефолтным подходом для показа ProgressBar'а.
Тип показать его поверх вьюхи, а потом скрыть, лол, так даже в офф-руководстве гугла написано.
интересна тема android разработки , что нужно изучать для того что бы плавно вливаться в разработку , начинать практиковаться и не было каши в голове.
уже точно понял что нужно начать с джавы , а потом начать изучать котлин , так как второе вытекает из первого и будет проще понять котлин имея хорошую базу на джаве. Но дальше в силу того что я зелен как трава в чистом поле , начинаю путаться в тонне названий .
понял что надо изучать будет :
1)Git
2)Аpi
3)Sql
заранее спасибо за ответы
перечитай, ебик
>интересна тема android разработки
не интересна походу
>что нужно изучать для того что бы плавно вливаться в разработку
работу поисковика
>понял что надо изучать будет :
ты ничего не понял
Java, MongoDB, Android SDK
>начинать практиковаться
this прежде всего в любом ЯП
>и не было каши в голове.
ограничь потоки медиа и прочих раздражителей в своей жизни
>Шапка проебана
не думал что вы проебали мою шапку. впрочем все равно, я не пишу больше на андроиде. и вам не советую.
На какой стул сел?
Например, если у треда нет изображения, оно там может с нихуя появится из прошлого треда
RecyclerView же переиспользует как-то элементы списка? Выглядит, как будто если я не перебиндил каждый элемент, то он может остаться тем же, что и был до этого
То есть, если в прошлом треде я задал holder.imageViewPostImage, а в этом не задал, то там может остаться изображения с прошлого
Это норма?
Оп, как можно было проебать шапку?
>>750680
Что у тебя за задача? Как ты пришел к идее "перерисовывания"? Не советую заигрываться с лейаутом из кода, только время потратишь, но далеко не факт, что добьешься стабильной работы и решишь задачу. Из-за этого, кстати, Гугл пилит Jetpack Compose.
Какие вьюхи тебе нужны, какой функционал? Что нужно отображать, что изменяется, а что нет? Подробнее напиши.
>>751338
Основы программирования, логические операции -> Джава(базовый синтаксис и особенности языка) -> ООП -> особенности различных версий Джава -> алгоритмы и структуры данных -> многопоточность -> дженерики -> функции высшего порядка -> Котлин -> Android SDK(UI, версии и различия, особенности оси на уровне работы виртуальной машины) -> работа с БД, CRUD(можно и на этапе знакомства с алгоритмами) -> git -> networking/REST API/JSON/сериализация -> актуальные фреймворки(зачем и почему, спойлер: экономия времени ) -> архитектура, зависимости, инверсия контроля -> ?..
Вот примерный флоу, которому я бы следовал, если бы учился сейчас. начал бы сразу с алгоритмов, если честно
В эту же последовательность нужно вставить clean code, SOLID, DRY/DIE, KISS, YAGNI и прочие модные аббревиатуры, которые весьма актуальны. Что-то упустил, но, думаю, этого достаточно.
Читай документацию книги, минимум ютуба и туториалов.
>>753369
>Java, MongoDB, Android SDK
В голос
>>753954
>Сильно ли скажется на производительности
Зависит от количества объектов, лучше апдейтить. Ориентируйся на оправданность использования того или иного подхода. масштабируй
>>755587
о каком треде идёт речь?
RV всего лишь отображает данные, которые байндятся к позиции, так что всё зависит от того, чем и как ты его кормишь.
>Что у тебя за задача? Как ты пришел к идее "перерисовывания"?
У меня BLOC-паттерн. Ну или упрощенно - стейт-система по типу Redux в жопаскрипте.
Суть в том, что интерфейс полностью соответствует текущему state.
if (state = LoadingState) рисуем прогресбар
if (state = ErrorState) рисуем ошибку
if (state = SuccessState) рисуем списочек
Сейчас у меня в этом месте несколько костыльно, ибо onCreateView() вызвается лишь 1 раз, а логичнее, чтобы интерфейс перерисовывался для каждого стейта.
Сейчас же у меня тупо progressbar скрыт и появляется поверх пустого списочка, а ошибка показывается снекбаром.
Короче, мне надо полностью перерисовывать интерфейс полсе того, как он был нарисован в onCreateView().
Не обязательно вручную, но надо переинфлейтить xml'ку
>У меня BLOC-паттерн
>стейт-система по типу Redux
Если провести аналогию с BLoC, твой стейт должен реагировать поток данных, которые ты получаешь, будь то ViewModel или RX, где ты можешь вызывать коллбэки в зависимости от состояния Observable/Flowable. Соответственно, если ты используешь single activity, в активити у тебя будут оверрайд методы onSuccess, onLoading, onFailure от интерфейса, который она экстендит . В этих методах ты управляешь видимостью прогрессбара(он есть только в главной активити, т.к. она является контейнером с общей логикой отображение) и загружаешь нужный экран фрагмент для пользователя, в зависимости от состояния.
Если источник данных не поймал success, пользователь просто не попадёт во фрагмент со списком.(с RX это делается красиво)
Это общий принцип и важно понимать, что реализация зависит от используемой тобой архитектуры. но он хорошо масштабируется
>onCreateView() вызвается лишь 1 раз, а логичнее, чтобы интерфейс перерисовывался для каждого стейта
Не логичнее, это дорого, да и незачем лишний раз трогать жизненный цикл вьюхи. У тебя есть контейнер, который ожидает данные - он итак пустой, если их нет. Ты должен показать его пользователю, если они есть.
Почитай об MVI.
>Если провести аналогию с BLoC, твой стейт должен реагировать поток данных, которые ты получаешь, будь то ViewModel или RX, где ты можешь вызывать коллбэки в зависимости от состояния Observable/Flowable
Вот именно это и происходит. Есть BlocViewModel : ViewModel, где есть метод mapEventToState(event: EventInterface): Flow<StateInterface>
Далее немного магии и преобразований и фрагмент подписывается на LiveData с этими стейтами.
Ну, как ты понимаешь, очень важно, что может быть только 1 актуальный стейт, не может быть сразу двух активных стейтов.
Вот в идеале этот обсервер стейтов должен быть чистой функцией, выдающей интерфейс в ответ на стейт, но пока это нихуя не выходит и приходится скрывать/показывать уже существующие в лейауте вьюхи, например, тот же прогресс-бар.
>загружаешь нужный фрагмент для пользователя, в зависимости от состояния
Вот юзать отдельный фрагмент на каждое состояние выглядит дорого и геморно... Или нет? Надо создать класс для фрагмента, xml для него... Хотя...
С другой стороны, отлично ложиться на чистоту обсервера стейтов - он будет просто высирать по фрагменту на стейт.
>очень важно, что может быть только 1 актуальный стейт, не может быть сразу двух активных стейтов.
Ты можешь просто создать observer внутри фрагмента, проинициализировать в нём же интерфейс OnLoadState в onCreateView/onAttach и вызывать state.onSuccess(коллбэк), когда livedata.value не null. (адаптируй под флоу пользователя)
>Вот в идеале этот обсервер стейтов должен быть чистой функцией
Вот смотри, в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар.
Ты обозреваешь данные, а не стейты. Стейты отвечают за доступ, а твоя задача - сообщить о том, что вот тут будет такой-то стейт.
>Вот юзать отдельный фрагмент на каждое состояние выглядит дорого и геморно
Ты, похоже, не понял меня.
Пример:
Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2. Ты мыслишь не в той плоскости, потому что всё то, что не связано с данными, которые могут отсутствовать, или условиями, которые могут не быть соблюдены(как успешная аутентификация), детерминировано.
>>755865
>Почитай об MVI.
Почитал, все те же вариации на тему реактивщины под другим соусом, что и в Redux и в BLOC. Никакой новой инфы не узнал.
Суть везде та же.
>в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар.
То есть, глобальный обработчик стейтов, один на все приложение?
Вообще, я, да и не только я, разделяю понятие стейта и побочного эффекта. Стейт - это то, что остается после изменения конфигурации. Перевернул экран - списочек все тот же.
Побочный эффект же характерен тем, что возникает только 1 раз, при этом стейт не меняется. К этому относятся показ снекбара, диалога, осуществление навигации на другой фрагмент и т.п.
>Ты обозреваешь данные, а не стейты
Вот тут не понял. Стейт же и есть данные для UI.
Но смотри, с какими проблемами я сталкиваюсь при работе со всей этой реактивщиной и стремлением к максимальной чистоте функций.
1) Если сделать полную перерисовку интерфейса в ответ на стейт (обсервер стейтов идеальная чистая функция), то при изменении конфигурации будет сброшена, например, позиция списка, потому что он фактически перерисован заново. Хотя ее тоже можно сделать частью стейта, но по мне так это больше деталь реализации UI и об этом вообще я думать не должен.
2) Если обсервер стейтов не чистая функция, то возникают непредсказуемые побочные эффекты, теряется контроль над фактическим состоянием UI, он перестает соответствовать объекту стейта.
>Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2
Ну вот, ты вновь не отделяешь стейт от побочного эффекта.
По твоей схеме onLoading тоже должен был являться стейтом и породить свой фрагмент.
Но вообще, именно с осоознанно созданными побочными эффектами у меня проблем нет, потому что они обрабатываются отдельно от стейтов и стейт не меняют
Ну и еще, если создать глобальный обработчик событий и стейтов, то каждое событие и каждый стейт должны быть уникальными.
Сейчас у меня есть универсальные события типа ListItemClicked, которые могут иметь разный смысл в контекте разных BlocViewModel.
>>755865
>Почитай об MVI.
Почитал, все те же вариации на тему реактивщины под другим соусом, что и в Redux и в BLOC. Никакой новой инфы не узнал.
Суть везде та же.
>в MVI ты бы создал в активити функцию render(), которая содержала бы в себе when(state: State) и управляла прогрессбаром(один на всё приложение - хорошая практика, если юзаешь стейты, проще управлять), открывала бы фрагмент или показывала бы снекбар.
То есть, глобальный обработчик стейтов, один на все приложение?
Вообще, я, да и не только я, разделяю понятие стейта и побочного эффекта. Стейт - это то, что остается после изменения конфигурации. Перевернул экран - списочек все тот же.
Побочный эффект же характерен тем, что возникает только 1 раз, при этом стейт не меняется. К этому относятся показ снекбара, диалога, осуществление навигации на другой фрагмент и т.п.
>Ты обозреваешь данные, а не стейты
Вот тут не понял. Стейт же и есть данные для UI.
Но смотри, с какими проблемами я сталкиваюсь при работе со всей этой реактивщиной и стремлением к максимальной чистоте функций.
1) Если сделать полную перерисовку интерфейса в ответ на стейт (обсервер стейтов идеальная чистая функция), то при изменении конфигурации будет сброшена, например, позиция списка, потому что он фактически перерисован заново. Хотя ее тоже можно сделать частью стейта, но по мне так это больше деталь реализации UI и об этом вообще я думать не должен.
2) Если обсервер стейтов не чистая функция, то возникают непредсказуемые побочные эффекты, теряется контроль над фактическим состоянием UI, он перестает соответствовать объекту стейта.
>Активити -> фрагмент1 -> клик -> onLoading -> onSuccess -> фрагмент2
Ну вот, ты вновь не отделяешь стейт от побочного эффекта.
По твоей схеме onLoading тоже должен был являться стейтом и породить свой фрагмент.
Но вообще, именно с осоознанно созданными побочными эффектами у меня проблем нет, потому что они обрабатываются отдельно от стейтов и стейт не меняют
Ну и еще, если создать глобальный обработчик событий и стейтов, то каждое событие и каждый стейт должны быть уникальными.
Сейчас у меня есть универсальные события типа ListItemClicked, которые могут иметь разный смысл в контекте разных BlocViewModel.
>Ты можешь просто создать observer внутри фрагмента, проинициализировать в нём же интерфейс OnLoadState в onCreateView/onAttach и вызывать state.onSuccess(коллбэк), когда livedata.value не null. (адаптируй под флоу пользователя)
Вот про это по-подробнее, плиз.
Еще есть охуенная проблема, как все эти стейты и реактивность положить на жизненный цикл ведра и его особенности.
Например, те же фрагменты
>Вообще, я, да и не только я, разделяю понятие стейта и побочного эффекта.
Дело в том, что я придерживаюсь следующего принципа - есть UI стейты(которые не могут изменять объекты и, собственно, конечны в своём выполнении, ответственны только за свою отработку в качестве "ключа", так что сайд эффекты исключаются), которые должны выступать ограничением для пользователя и выстраивать его "флоу"(Простые коллбэки, которые вызываются тогда, когда данные получены(observer livedata). Важные, например, сессионные данные (вроде id и подобного) передаются через бандл), есть состояние самих данных в репозитории, откуда они идут во viewmodel, которые либо есть, либо отсутствуют. Получать данные или состояние данных нужно во вьюмодели/презентере, UI должен только обозревать их и реагировать(обновляться, отображать и т.д.).
>>756084
>Вот про это по-подробнее, плиз.
Например, в onAttach создаешь callback = context as StateListener, хендлишь ClassCastException через try/catch, при нажатии на кнопку вызываешь callback.onLoadList, который либо загружает фрагмент со списком(получая данные из viewmodel), либо делает что-то, что предусмотрено в этом случае.
>как все эти стейты и реактивность положить на жизненный цикл ведра
Делать можно как угодно, хоть создавать compositeDisposables прямо во фрагменте или активити и развлекаться, диспозить в onDetach. не стоит так делать Есть ли в этом необходимость? Логика должна быть разделена, модули должны быть изолированы.
Не до конца понимаю твоих намерений. Чтобы отобразить фрагмент со списком, можно просто чекать value livedata и выбрасывать onError, если данные где-то подкосило, потому что все ивенты в итоге приходят во viewmodel, но никак не в UI слой.
Смотри, у меня сейчас точкой входа является фрагмент.
Фрагмент сразу же рисует RecyclerView с пустыми данными и отправляет событие Initialized в модель.
Модель в ответ на это событие начинает грузить данные и эмитит стейт Loading, затем стейт Success со ссылкой на данные (которые все еще в самой моделе).
Фрагмент ловит стейт Success и тупо заменяет тот пустой лист-плейсхолдер на эти данные (по ссылке).
Еще у меня стоят коллбеки на свайпы элементов списка, которые тупо отправляют соответствующие события в модель.
Модель в ответ на них удаляет или изменяет ДАННЫЕ (которые хранятся в самой моделе) и отправляет действие (я так называю побочный эффект) о том, что элемент, допустим удален.
Фрагмент ловит это действие и нотифит адаптер о том, что данные изменились. И интерфейс листа красиво показывает анимацию удаления элемента.
Фишка в том, что стейт-то не изменился. Просто побочный эффект привел к изменению самих данных.
Стейт, способ отображения UI каким был, таким и остался, удали хоть все элементы.
Несмотря на кажущуюся всратость, это оказалось на редкость живучей хуйней, которая позволяет мне лавировать между всеми этими колбеками, адаптерами и побочными эффектами.
Но только прикол в том, что фактически стейт у меня на фрагмент всегда один, хотя их может быть тип много.
Вот в идеале надо бы как-то это в коде обозначить, что стейт = фрагмент, всегда.
Тогда возникает вопрос с точкой входа.
Сейчас это сам этот фрагмент.
Но в идеале точка входа должна быть какой-то другой.
Чтобы некая хуйня обсервила стейты и в ответ на каждый запускала фрагмент.
То есть, чтобы если модель выдала ошибку - сразу и нарисовался фрагмент ошибки, а если норм данные - то сразу запустился фрагмент с норм данными.
НО. Тут еще дело в том, что как именно эти фрагменты запускать.
Потому что иногда мне надо в пределах того же ЭКРАНА полностью перерисовать интерфейс, то есть таки сменить стейт, а иногда мне надо запустить навигацию на новый фрагмент, чтобы он остался в стеке переходов.
То есть, поменять стейт без перехода в рамках того же "экрана" или же перейти на новый фрагмент-экран...
Смотри, у меня сейчас точкой входа является фрагмент.
Фрагмент сразу же рисует RecyclerView с пустыми данными и отправляет событие Initialized в модель.
Модель в ответ на это событие начинает грузить данные и эмитит стейт Loading, затем стейт Success со ссылкой на данные (которые все еще в самой моделе).
Фрагмент ловит стейт Success и тупо заменяет тот пустой лист-плейсхолдер на эти данные (по ссылке).
Еще у меня стоят коллбеки на свайпы элементов списка, которые тупо отправляют соответствующие события в модель.
Модель в ответ на них удаляет или изменяет ДАННЫЕ (которые хранятся в самой моделе) и отправляет действие (я так называю побочный эффект) о том, что элемент, допустим удален.
Фрагмент ловит это действие и нотифит адаптер о том, что данные изменились. И интерфейс листа красиво показывает анимацию удаления элемента.
Фишка в том, что стейт-то не изменился. Просто побочный эффект привел к изменению самих данных.
Стейт, способ отображения UI каким был, таким и остался, удали хоть все элементы.
Несмотря на кажущуюся всратость, это оказалось на редкость живучей хуйней, которая позволяет мне лавировать между всеми этими колбеками, адаптерами и побочными эффектами.
Но только прикол в том, что фактически стейт у меня на фрагмент всегда один, хотя их может быть тип много.
Вот в идеале надо бы как-то это в коде обозначить, что стейт = фрагмент, всегда.
Тогда возникает вопрос с точкой входа.
Сейчас это сам этот фрагмент.
Но в идеале точка входа должна быть какой-то другой.
Чтобы некая хуйня обсервила стейты и в ответ на каждый запускала фрагмент.
То есть, чтобы если модель выдала ошибку - сразу и нарисовался фрагмент ошибки, а если норм данные - то сразу запустился фрагмент с норм данными.
НО. Тут еще дело в том, что как именно эти фрагменты запускать.
Потому что иногда мне надо в пределах того же ЭКРАНА полностью перерисовать интерфейс, то есть таки сменить стейт, а иногда мне надо запустить навигацию на новый фрагмент, чтобы он остался в стеке переходов.
То есть, поменять стейт без перехода в рамках того же "экрана" или же перейти на новый фрагмент-экран...
Распишу подход, мб пригодится и что-то применишь.
Если пилить по чистой архитектуре:
Модель должна содержать только описание объектов, репозитория(абстракцию) и юзкейсы для получения данных в презентере/viewmodel. Данными ты манипулируешь(получаешь тем или иным способом, кэшируешь и т.д.) в другом слое(с реализацией абстрактного репозитория), где могут быть мапперы для модели и всё то, что делает модуль максимально изолированным, но нет андроида - он во view слое, где и viewmodel(которая реализует юзкейсы). Всё это позволяет сильно упростить жизнь.
Интересно, как у тебя выглядит фрагмент ошибки? И зачем ей свой фрагмент?
Точка входа - активити, которая ловит коллбэки(loadNameScreen, где тебе прогрессбар/диалог/снэкбар и все остальное) и навигейтит во фрагменты через navhost(тут же легко реализуется бэкстэк и бандл, куда можно что-то передать, к примеру, флаг, который будет влиять на отображение компонентов внутри фрагмента). Сделать god object'ом активити в этом случае очень сложно, если ограничиться навигацией. Работать с таким кодом приятно.
https://github.com/Weydile/Shopping-list-android
Ясно все с вами
подскажиет, обязательно делать приложение по правилам material дизайна чтобы оно выглядело как нативное андроид приложение, я на qml делаю макет сейчас, и вот делаю дизаин как мне нравится, но набрёл на правила material дизайни и хуй знает, подстраиваться ли, или делать так как в голове вырисовалось.
сука вопросительные знаки проебал :<
Сап, котаны, есть 2 интеесных вопроса:
1) Если я хочу отображать состояние из Foreground Service в UI через LiveData, то должен ли сервис непосредственно вызывать метод postValue и передавать туда новый экземпляр объекта, который описывает состояние?
2) В чем практический смысл Dependency injection, особенно Dagger 2?
Привет. Пытаюсь создать в новый build type в gradle. Прописал его в buildTypes, создал директорию в src с AndroidManifest итд. Но он не появился в assemble tasks. Что я делаю не так?
да, я это понимаю что слишком тонкий хедер и в футер лучше бы ещё что то добавить чтобы 3 кнопки было, но вопрос у меня стоит в том: нужно ли всем правилам следовать или можно юзать свои иконки вместо material иконок и свои идеи в некоторых местах?
1) Ты должен вызывать postValue с состоянием во viewmodel, обозревая livedata в UI.
2) Реализует DI-паттерн, сокращает количество кода, генерируя dagger и hilt, другие же реализуют паттерн service locator и дергают зависимости без подробностей реализации, когда зависимый объект в них нуждается логику создания объектов(фабрики для viewmodel, например) и позволяя создавать новые объекты с помощью аннотаций. создает граф зависимостей Упрощает работу с зависимостями в самом коде и тестах.
>>759067
Нужно или нет - решать тебе, суть material в самой концепции взаимодействия компонентов интерфейса, образующих "материальный дизайн". Он просто предоставляет тебе инструменты и гайдлайны. Я стараюсь придерживаться, если это возможно.
спасибо за ответ.
Если твой уровень понимания UX на пике - то делай строго по material и не еби мозг пользователям. UX designer - это как бы професия, за это деньги платят и там есть что изучать что бы хуй ложить на метериал.
ну у меня уровень понимания UX скорее на хуях чем на пике, ну думаю сделаю макет руководствуясь изредка material, просто я хз они иконки предоставляют, а платные они или фришные я так и не понял, поэтому беру иконки с другого сайта с указанием авторства, потом перевернул телефон, понял что то что на якорях не закреплено, съехало нахуй)) и как оно всё будет себя вести на другом телефоне тож хз, потому что AVD требует 70гб памяти, а у меня на линухе столько нету, и тестирую на своём телефоне, если есть опция запретить поворот, было бы найс. Я просто вот вот пришёл к андроид разработке после qt десктопа на уровне лаб универа (а-ля сделать графический редактор фоток и тд), и понял что вот это наиболее доставляет пока что, поэтому и пытаюсь понять куда двигаться и что делать, и не особо знаком пока со всеми правилами.
двачую
>>759206
>просто я хз они иконки предоставляют, а платные они или фришные я так и не понял
Our icons are free for everyone to use. Please don’t try to sell them.
https://material.io/resources/icons/?style=baseline
>AVD требует 70гб памяти
Ты про дефолтный? Я от него отказался ровно в тот момент, когда впервые появилась ошибка конфигурации девайся, связанная с boot-типом и ключами, что либо фиксится на какое-то время, а затем появляется вновь, либо не фиксится. слишком много проблем с ним Использую Genymotion, очень лёгкий и удобный.
сенкс!
1) Каким образом я это сделаю, если источник этих данных внутри foreground service? Предлагаешь binding и intetns? А почему тогда всякие базы данных и репозитории можно хранить внутри application и вызывать откуда угодно, а здесь так нельзя?
Алсо, если только сделать observeForever внутри ViewModel для той ливдаты, через которую данные с сервиса пиздячат.
Ранее ты написал, что тебе нужно обозревать состояние, которое относится к данным уровня фреймворка(читай андроида) к этому же уровню относится сам сервис, поэтому не место в слое данных - он должен быть изолирован , так что с репозиторием тут нет ничего общего и ты можешь получать его прямо во viewmodel с помощью LifecycleService.AndroidViewModel нужна как раз для таких случаев, когда нужен доступ к контексту, хотя лучше стараться не использовать её
>>759379
>сделать observeForever внутри ViewModel
Довольно костыльно, но пробуй. Повторюсь, что в идеале ты должен получить данные во viewmodel и положить их в livedata, чтобы они ушли в UI через observe. Пробуй разные подходы и адаптируй под свою архитектуру. А ещё лучше - изначально выбирать подход, исходя из имеющейся архитектуры
Вариантов тут реально много, но для того, чтобы выбрать подходящий, нужно понимать степень изолированности модулей в твоем коде. в большинстве гайдов ты вообще увидишь, что сервис связывают с жц актвити и жонглируют интентами/бандлами
>сервис связывают с жц актвити и жонглируют интентами/бандлами
Это же ужасно! Для передачи данных в сторону сервиса можно использовать startService с интентом. Но вот в обратную сторону хочется эти данные через репозиторий гонять, который выдает livedata, на обновление которых я подпишусь в observe forever внутри ViewModel.
Ужасно, но, как видишь, вариантов реализации много, всё зависит от требований.
К слову, иногда использование бандла позволяет существенно сократить количество кода и убрать лишнюю цепочку вызовов. Например, можно засунуть что-то в бандл, а оттуда в livedata, которая обозревается.
https://github.com/Weydile/WeatherService-android-application
Какой-нибудь мимомидл, очевидно же.
1) presenter не должен пересоздаваться
2) вся логика со свитчем внутри презентера должна быть
3) зачем нужен презентер, когда сейчас вьюмодель в тренде
Как мне это распарсить? Что пихать в адаптер? И тут ещё ретрофит и рум. Как сделать так, чтобы POJO и еntity были разными классами?
Спасайте, поцоны.
Пасиб)
> var message: Map(String, List<String>)
val?
Делаешь репозитории с апи и руммом
Для каждого свои дата классы
И DTO для слоя бизнес логики и дальше
Репозитории отдают максимально простые структуры
Список строк там
Пихаешь в адаптер это
Короч юзай viewmodel из aac, можешь даже свой презентер отнаследовать от него
Есть один сикбар. Так вот если я тавлю ему padding start, то на канвасе проебываются все масштабы при перерисовавывании тогла. КАКОГО ХУЯ. Часов 6 решение ищу.
Пикрандом.
С меня 3 бочки нефти
Не трогай его вообще, меняй атрибуты его контейнера
Head First наиболее структурирован, как мне кажется. Начни читать другие книги и продолжай ту, которая зайдет, вот и всё.
Не игнорьте мой пост, пожалуйста. Хотя смею предположить, что от подобных тем вас уже тошнит.
Значит у меня старый телибон Xperia Ведроид. Оттуда мне надо взять смски и сохранить их на компьютер.
Я пробовал это сделать с помощью программы Xperia Companion, там пытался backup сделать смс сообщений. Но программа все время отваливается и говорит, что backup смс был неудачный. Интуитивно я думаю, что телибон слишком старый, и программа не умеет с ним контактировать.
Вопрос такой - как сохранить на компьютер смс с Андроид телефона так, чтобы можно было потом в будущем в нужный момент наоборот взять с компьютера сохраненные смс и заново вставить в телефон, чтобы эти смс отображались в телефоне.
Заранее спасибо, пожалуйста, ответьте на мой ответ.
Хочу немного окунуться в мир мобильной разработки.
серверную часть на пхп || ноде пишут?
Может начать с какого нибудь фреймворка флатер или реакт нэйтив?
Реакт я знаю немного по вэбу.
>серверную часть на пхп || ноде пишут?
Хоть на чем
>Может начать с какого нибудь фреймворка флатер или реакт нэйтив?
Так можно делать только простые приложения
Коммерчески это все почти не используется
Хм...
А посредством флатер или реакт нэйтив я смогу понять как вообще работать с системными механизмами в андроид? Или там все это зарыто в абстракции? Или при работе с джавой все тоже зарыто в абстракции?
Попердолиться может с Джавой тогда, говорят современный пхп довольно сильно на нее похож. Может быстро разгребусь. а еще айфоны блядь
>>Или там все это зарыто в абстракции?
туплю, они же мультиплатформа. Значит полюбому все - абстракция
Хочу сделать добавление элементов интерфейса программно. По клику на "ADD" появляется новый столбец в контент-части. Столбец, в идеале, занимает всё пространство контент-части. Когда появляется новый столбец - пространство делится между всеми столбцами поровну.
Задизайнил это в студии.
Если я добавляю элементы вручную в дизайнере, то всё работает как надо, пик 1.
Если я добавляю программно, то всё работает не так как запланировано, пик 2.
Код вставки - пик 3.
Вставляемый XML - https://pastebin.com/yB0a2R5T
Что делать, в чём моя ошибка?
Решение ужасное
Убирай из xml всё лишнее, оставь только кнопки для управления. Затем создай контейнер(ресайклер, например) во фрагменте и добавляй новый айтем, который будет создавать вьюху. Так ты не просто создашь вьюху, но и сможешь манипулировать айтемом в целом, читай: задавать поведение, управлять жц.
>>764355
>линию с закругленными краями
Это как?
Если ты имеешь в виду края вьюхи, гугли shape, если речь идет о холсте, пикселях и т.д. - гугли сглаживание для своего кейса.
>Убирай из xml всё лишнее, оставь только кнопки для управления. Затем создай контейнер(ресайклер, например) во фрагменте и добавляй новый айтем, который будет создавать вьюху. Так ты не просто создашь вьюху, но и сможешь манипулировать айтемом в целом, читай: задавать поведение, управлять жц.
Спасибо, сейчас буду пробовать.
>Если ты имеешь в виду края вьюхи, гугли shape
Ну, как оказалось корнерсы можно задать только ректанглу, так что прийдется танцевать с бубном. Канвас не вариант.
Под ведро никогда не прогал. Реально за пару месяцев по гугловским курсам базовые вещи изучить и устроиться на джуна по 10$/h? По удаленке
Спс
Нет. Нереально. Ведройд по знаниям сравним с вебом. Без либ ты далеко не уедешь.
Чтобы наслаждаться SDK нужно либо в иос, либо в скалу, либо в ерланг.
Т.е. айосу за 2-3 месяца научиться можно?
Мне они не нужны. Они нужны работодателю
>по гугловским курсам базовые вещи изучить и устроиться на джуна по 10$/h? По удаленке
>2020
Лол))0))
>андроид фрилансом
Ну имхо сейчас с 0 в фриланс вкатиться можно только в вебе. Особенно там не востребована нативная ведроид-разработка на жабе/котлине. Вкатись в реакт, научись быстро клепать говно и под ведро и под айос - перспектив на фрилансе в 10 раз больше.
>2) В чем практический смысл Dependency injection, особенно Dagger 2?
В выкачивании бабок с заказчика с аргументом "нужно время на внедрение еба-технологии"
Ну если СИРОЗНЕЕ - то если это
1) проект на год+
2) будут unit/ui-тесты
То да, имеет смысл встраивать в архитектуру di
а в чем проблема с фрилансом под андроид? я захожу на апворк, фл.ру и там всегда полно работы
Это удобно, тестируемо и масштабируемо, поэтому имеет смысл использовать di в любом случае, будь то маленький или большой проект. И нет разницы в том, делает ли это фреймворк, потому что хорошая архитектура нуждается в ограничениях и изолированности, которые предоставляет di. Говоря о фреймворках, нет смысла отказываться от потенциальной экономии времени и ресурсов, упрощенного сопровождения, потому что накладные расходы внедрения минимальны, говоря о новых проектах. При внедрении в легаси проекты ты тратишь чуть больше ресурсов на старте, но в итоге получаешь плато, которое позволяет расширять проект с минимальными затратами, имея оттестированные компоненты, что также сокращает потенциальные расходы.
Любой коммерческий продукт. Понятно, что в своих поделках, можно делать как угодно.
=\
Раньше никогда ничего под андроид не писал, но вот решил тут попробовать изучать vulkan апи такое графическое, комп у меня говно.
А вот чип в телефоне вроде как поддерживает, правда как проверить драйвера и прочее - хз.
Так вот, может быть где-то есть где-то туторы и гайды как вести разработку без монструозной андроид студии (пускай даже в блокноте, похер) и создании апкшки?
Гугли что-то типа build android from comand line, видел много статьей, если хочешь понять что куда.
Как написал всю хуйню в блокноте можешь в консольке ебнуть ./gradlew :my-super-app:installDebug это соберет и установит апку на подключенный девайс.
Я скачал android studio, установил её, скачал исходники в zip-файле, распаковал, запустил студию, выбрал "open existing android atudio project". Оно вроде открылося, но дальше янихуянепонел.
Начались всякие проблемы при попытке собрать проект без каких-либо изменений, при попытке создать эмулятор андроида.
Пикрелейтед1 - сразу после открытия и попытки собрать.
Пикрелейтед2 - если нажать на ссылку "Update NDK version to 21.3.6528147 and sync project" в пикрелейтеде1
Пикрелейтед3 - окошко добавления конфигурации, что в нём вообще нужно выбирать? Если я выбираю "android app", мне дальше нужно выбрать какой-то модуль, но в списке нет модулей нихуя. Пикрелейтед4 собственно оно.
Как мне ПРОСТО настроить эту студию и ПРОСТО собирать приложение? Мне надо-то сделать всего несколько правок, ёбана. Автор, точнее тот человек, кто сейчас занимается этим приложением, сказал, что не использует IDE и ничего не может подсказать по этому поводу. Щито мне делать и как добиться желаемого?
Наверн придется тупо копировать. Почитал что апп бандл не хранит все языки, а скачивает тока тот что нужно. Значит это не скажется на размере приложения.. Если есть лучшие решения, жду ответа.
Довольно популярная проблема, мне кажется, но в сети об этом почти нет инфы.
Второй вопрос: а сделать полностью прозрачную активити?
Ну походу норм никак, только костылить с
Locale current = getResources().getConfiguration().locale
А ваще с 7ого андроида, юзер может выбирать несколько языков. Если белорус не ярый патриот, то наверняка за белорусским будет стоять русский, и потом английский. Ну и дроид будет смотреть что есть в аппе.
Студенческий не приняли. Буду в наглую говорить, что мне нет 18 и отошлю пасспорт
>полностью полноэкранную активити
>не показывались статусбар и навбар
Через стиль, либо через флаги WIndowManager'а.(Window в 21+) У Навбара свои флаги.
> полностью прозрачную активити
То же самое, только дёргаешь транспарентность.
На кой хер она тебе?
Нужен ноутбук для стажировки в компанию.
Какой самый дешевый ноут можно взять для андройд студии?
Я тестил, все равно показывает инглиш. Поставил языки болгарский и второй русский, в проге же язык все равно инглиш. Буду гуглить что не так.
Юзаю values-b+ коды и все равно нихрена.
Инстукция по этим кодам - 20 страниц непонятного пиздеца.
Кароче, искал и ничего не нашел чтоб работало как надо. Эта хуйня со сменой языков на андроид 7, если их указано несколько, работает не так как хочется, переводит только некоторые из стрингов, например кнопки в боттомнавигейшнвьюв, но все остальное нет. И работает только если указать resConfigs "en", "ru", "ua"... и тд в грандл файле.
Нашел эту подсказку с resConfigs тут: http://developer.alexanderklimov.ru/android/locale.php пикрил. Но эта опция "auto", которую автор говорил юзать, удалена разрабами потому что нестабильно работала и если ее написать выбивает ошибку. Одним словом, трудно разобраться.
Вручную менять локали насильно тоже не хочу, это ультра нестабильно реализовано в ведре, постоянно меняется реализация, много где советуют не вникать в это дерьмо.
Буду копипастить .хмл файлы прост и потестирую сможет ли аппбандл отдавать только необходимые стринги не увеличив размер в плейсторе для закачки на 50 мб. Надеюсь меня гугл не забанит за то что фактический язык не будет соответствать тому что я указал в хмл.
Суть проблемы:
Когда лью сылку на пикчу в БД, а потом оттуда выгружаю, то все работает хорошо и отображается в imageView. Но если закрыть приложение, а потом открыть, то Uri из БД выгружаются точно такие же, но в imageView почему-то не отображаются
Разобрался. При запуске активити с выбором картинки нужно было писать action_open_document, вместо action_open_image
Второй вариант дает права на документ только один раз, первый навсегда
Подскажите, установятся ли линуксовые драйвера от USB-ишной сетевой карты TP-Link UE200 на смартфон с Android 10? И как это сделать?
Какой бюджет? Ноут с 8гб озу и пятым райзеном можно взять за 40к и дешевле, чего вполне достаточно для комфортной работы.
Из бюджетных я бы смотрел в сторону какого-нибудь VivoBook
поставь линуху, из-под нее запусти
Да, будет.
попробуй в termux запустить. или через adb shell
Intent intent = new Intent(Intent.ACTION_INSERT)
.setData(CalendarContract.Events.CONTENT_URI)
.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, millis)
.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, millis + 60 60 1000)
.putExtra(CalendarContract.Events.TITLE, evtext)
.putExtra(CalendarContract.Events.DESCRIPTION, evtext)
.putExtra(CalendarContract.Events.HAS_ALARM, true)
.putExtra(CalendarContract.Reminders.EVENT_ID, CalendarContract.Events._ID)
.putExtra(CalendarContract.Events.ALLOWED_REMINDERS, "METHOD_DEFAULT")
.putExtra(CalendarContract.Reminders.MINUTES, 1)
.putExtra(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT)
.putExtra(CalendarContract.Events.AVAILABILITY, CalendarContract.Events.AVAILABILITY_BUSY);
startActivity(intent);
Все работает вот только уведомление о событии выскакивает за 30 минут до самого события
Как программно указать что я хочу получать уведомление скажем за 1 минуту до события?
.putExtra(CalendarContract.Reminders.MINUTES, 1)
почему то не срабатывает
Android 8.1
Например: google-http-client-1.22.0, который нужен кому-то из инструментов сборки, резолвится в url jcenter.bintray.com/com/google/http-client/google-http-client/1.22.0/google-http-client-1.22.0.jar скачивается только из-под американских проксей, а напрямую d29vzk4ow07wi7.cloudfront.net бросает PR_IO_TIMEOUT_ERROR и хуй че сделаешь. И така хуйня постоянно.
Сижу с tele2 spb.
Было у кого подобное? Смог решить?
Виртуалки или anbox
Хромбуки поддерживают андроидстудио, если что.
Но это больше для энтузиастов, вдруг там что-то будет работать не так как ты хочешь и ты скажешь что я посоветовал хуйню, но лично я возьму ноут или трансформер на хром ос.
Но гугл рекомендует покупать хромбуки с ай5 процом и 8 гб озу для андроид студио. Но я думаю что и на более слабом железе вытянет.
Эмулятор в андроид студио с виртуализацией для быстродействия
Как-то я завис на многопоточности. Все эти AsyncTask, Handler, Service я еще могу понять. Но в чем смысл корутин и RX ? Нужно ли их изучать и что лучше использовать?
Говорят, что RXJava на все случаи достаточно. Но некоторые говорят, что вообще чисто AsyncTask используют и все. Что вы используете в проектах для многопоточности?
сам перекатываюсь в ведроид и тоже в ахуе со всего, особенно с всяких джетпаков андроидкс и прочтих аппкомпат, но насколько я понял, корутины дял котлина, а rx- для джавы. Для себя решил, что надо всё изучать последовательно от джавы и её обвязки на андроиде до котлина с его фичами
я думал, но потом передумал. Они и так почти все ставят гугл сервисы через какую-то хуйню.
Заканчиваю гугловский Android Developer Nanodegree, до этого прошел Android Basics Nanodegree. Хочу сделать крутой проект, чтобы показать уважаемому барину-работодателю.
Суть такова. Наше приложение локально анализирует с помощью простой нейросетки интересы пользователя исходя из истории его браузера, парсит великое множество новостных источников в сети и выбирает новости по тем темам и тем персонажам, которые пользователю интересны. Каждый новостной источник из базы имеет рейтинг доверия и рейтинг качества самого контента - защита от желтой прессы, Рен-ТВ и Первого канала. К каждой новости прикреплена система комментариев на основе репутации.
Работа с историей пользователя локально, никаких законов о конфиденциальности не нарушается. Нейросеть, которая вычленяет наиболее частые топики из набора данных на инглише, я уже где-то видел на гитхабе, это прям простейшая штука и ресурсов почти не потребляет.
Какие могут быть проблемы? Ну или предложите другой интересный проект на несколько месяцев. Лично у меня была еще идея сделать современную борду, чисто для андроид-юзеров. Потому что смотришь на все эти макабы, вакабы, на сосач тот же - функционал и ui ужасно устаревшие, зумерам скоро будет нужно что-то поновее, иначе совсем все в ТикТок свалят.
Rx нужен в проектах с java или какими-то задачами, которые проще решить с помощью него или они лучше всего вписываются именно в rx-инфраструктуру больше вопрос гибкости, корутины для Котлина, но, опять же, иногда удобнее использовать rx, если он может покрыть потребности и позволить не тянуть лишние зависимости в проект, либо просто сделать его чище.
Каждый раз когда надеюсь на авто-иморт у меня СТРАХ что оно повалится к хуям если контекст проебется, поясните где я долбоеб?
View Binding для рефов без даты, либо Data Binding, если есть что биндить. Или же fvbi, но точно не синтетика.
В тред Котлина, очевидно
Сравнительно частые миссы, которые не всегда фиксятся ребилдом.
View Binding сейчас стандарт, нул сейфти легкость использования и вообще даже нож для масла в честь его селфдиприкейтнулся.
Пробовал stetcho и дебажить с помощью браузера, но там как-то люто неудобно писать запросы.
Посмотрел на sqlscout, выглядит огонь, но 50$ за лицензию ЖАБА ДУШИТ, учитывая что прожект non-profit.
Может я чото упускаю
Нативный AS дебаггер в 4.1
Почему ты просто не откроешь интерпретатор который с sqlite-tools идет в консольке? Там все есть.
Нихуя не понял, ты имеешь ввиду качать sqlite'овый файл и отркывать его в любом гуевом вьювере?
Так и делаю, по сути, но это неудобно, т.к. приходится качать фаел с девайса/виртуалки
Подними какой-нибудь samba и используй его для хранения - и с компа и с мобилы доступ тогда будет, а дальше в чем хочешь работай с ней.
Есть задача - отслеживать все нотификации в бекграунде. Есть NotificationListenerService. На чем его запускать? Стандартный Service или же WorkManager?
Я не опытный, но скажу, что есть Android Paging. Его прикрутить попробуй.
Ну и дефолтные советы по оптимизации чекни
https://mobikul.com/how-to-optimize-recyclerview-in-android/
https://blog.usejournal.com/improve-recyclerview-performance-ede5cec6c5bf
Через интент фильтры лока экрана и бродкастрисиверы
Intent.ACTION_SCREEN_ON
Intent.ACTION_SCREEN_OFF
Intent.ACTION_USER_PRESENT
и флаги типа WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED:
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
Сделай грэлд таск на adb pull файла бд
О, класс. Стояла анимация перехода от одного фрагмента к другому, раньше из-за полсекундного лага её не было видно,хотя полсекундный лаг и остался, но зато теперь анимация видна, так что теперь этовыглядит нормально, спасибо
>>785000
Данные из SQLite в массив грузятся,но это происходит быстро, там проблема именно с отрисовкой RecyclerView была, но тот человек уже скинул инфу, так что в принципе всё в порядке уже
Страховка от бана аккаунта
Почему хуйню?
> Сколько уйдет времени на изучение ведра, чтобы можно было пойти устраиваться ждуном при условии, что имеются базовые университетские знания (кресты, высшая математика, алгоритмы и все такое)?
На ведре кресты практически не используются - прикладуха на жяве и котлине, игорь - безальтернативные юнити и сисярп.
Есть разве что ниша в лице УЕ4 (10% от рынка геймдева, остальное - юнити), но там в связи с последними скандалами от эпик геймс похоже всё тухло.
Такое случается если делать всякие if и прочее дерьмо. Ресайклервью работает нормально только если он все данные получает со списка. Хотя там есть некоторые ухищрения, чтобы сделать например expandable вью холдер, чтоб его нажал и показало больше данные в нем, например. И для этого есть гайдлайн гугл, погугли. Они делают через setActive и прочую дичь.
Кароче, чтоб работало норм - никаких if и все данные обезательно переназначать в каждом вьюхолдере. Хотя бы if else, чтобы засетать как null или как-то так.
Писос, сначала пойми для чего все это нужно, понимание придет. Советую вообще забыть что такое асинктаски и лоадеры, корутины наше фсе, реактивщина - флоу, в пизду РхЖабу.
>>778943
Про флаттер лучше всего читать тут:
https://apps.apple.com/ru/app/meduza-x/id1483980563#see-all/reviews
Кратко: пускать эту технологию в продакшн нельзя
>в пизду РхЖабу
Зря. Это наиболее близкая к идеальной реализация реактивного подхода, которая избавляет от костылей во многих случаях читай: имеет больше юзкейсов + способствует пониманию концепции как таковой. В настоящее время она выигрывает, а там как покажут релизы. надеюсь, что скоро
да буквально пару недель
Пытаюсь собрать проект: https://github.com/MobiSciLab/Baresip-DemoAudioCall
Получаю ошибку:
2020-08-27 13:41:59,434 [ 45390] WARN - e.project.sync.GradleSyncState - Gradle sync failed: Collection contains no element matching the predicate.
Подробностей больше нет. Что это может быть?
Конечно ниже 4 ондроед не бери и то только за копейки
а есть профиты в переходе? кроме того, что модно молодежно
разве корутины могут полностью заменить рх с их операторами (фильтрами, таймерами, мапами и проч проч)
Флоу может заменить большую часть функционала, но не весь, как я уже писал ранее. Ты получишь функционал, который проще внедрять, но не будешь уверен в том, будет ли он достаточен.
такова текущая картина для средне-сложных проектов С rx таких проблем не возникнет. Профиты ты получишь только в том случае, если он на 100% покрывает твои задачи в контексте сложности и ты уверен в том, что не придется ломать ноги. Если нет, лучше использовать rx.
Нужен хороший гайд по работе с Retrofit2 и okhttp по типу
https://www.youtube.com/watch?v=bcSVh9Jz3qE&list=PLuVP0-nOPzMx9SA-2lD_a1wtqrBTZ_pEn
Пожалуйста.
вот мне гайд по вкатыванию из пхп макаки нужен, че терь делать то а
Я уже разбираюсь в теории андроид разработки, знаю всякие полезные библиотеки современные по типу RecyclerView, Retrofit и тд. Теперь следующим этапом хочу начать уже собственно разрабатывать. Как и куда податься? Какие сайты фриланса лучше выбирать именно под тему андроид разработки? Может быть какие советы дадите еще. Буду крайне признателен.
Нихуясе. А ты с яйцами. Выучил как делать базовый адаптер для RecyclerView и готов уже с Кумарами по $5 тягаться. Мне бы так.
Я правильно понимаю, что если у меня minimum SDK стоит ниже 26, то по-хорошему для воспроизведения аудио в моей приложухе я должен реализовать сразу два метода: один для старых андроидов, другой для новых? И пометить каждый аннотацией, для новых или старых сдк оно создано? Или че вообще делать?
Спс
da
Есть рабочий apk, который как я понимаю работает с конкретными ссылками, грубо говоря берет с определенных 3rd party источников инфу и выдает тебе.
Вопрос, можно ли каким-то образом сделать декомпайл? разобрать приложение и поменять ссылки на свои, из которых оно берет информацию и скомпилировать по новой имя только apk файл?
Спасибо.
Вообщем, есть файл (.pb). И есть либа (OpenCV), которая знает что с ним делать. Есть метод
Net model = Dnn.readNetFromTensorflow(String modelFile);
И там нужно выбрать каким-то неведомым мне образом в параметр путь к этому файлу. И у меня вопрос. Куда положить в проект этот файл, что бы он был в апкшнике, и как прописывать путь к нему?
Можешь создать утилитку для проверки.
fun checkSdk(version: Int) = Build.VERSION.SDK_INT > version
var a = if (checkSdk(26)) 0 else 1
что я делаю не так?
> String modelFile
Да, это срань еще та, либа могла бы файловый дескриптор или инпут стрим жрать.
Клади в raw и попробуй https://stackoverflow.com/a/5861108/1454571
>>797486
Толсто
Дідько, ну почему в твою смышленую и светлую голову не прошло еще понимание того что описание проблемы равно пропорционально шансам что тебе кто нибудь да и поможет.
Есть и не мало, вот возьми и погугли. Практически весь функционал с рхЖавы существует, но неосиляторы и старые пердуны которые нихуя не хотят учить хрюкают что бы не напрягаться.
200-500 баксов в месяц от оче популярной проги 2к закачек в день. Игры не делаю.
200 баксов сча получаю, во время коронавируса. Мне кажется пенсионеры в Украине больше получают))0
Хорошо что живу в доме родаков и трачусь тока на еду немного.
Прланирую вкатиться в игры.
Все зависит от удачи и от необходимости продукта, внимания в деталям, красоты и тд. .. .. попробовать стоит, кароче.
Как?
Спс
скорее всего ты имеешь ввиду transission между скринами
Думаю поучить дальше андроид. Вопросики:
1. С чего начать изучение на джаве? Тут раньше вроде кидали на какой-то сайт англоязычный.
2. Под новые андроиды тоже на джаве можно писать? Для начала учебы не хотелось бы вообще лезть в котлин.
3. Какая версия джавы нужна(разные сдк разные версии джавы ведь поддерживают)? Джавы 8 нигде нет без десахаризации? Думаю минапи - 23.
4. У меня сейчас древнее устройство на 6-ке. Думаю купить еще бюджетку на 10ке. Норм будет такие два устройства, чтобы смотреть, как работает?
>1) С туториалов
>3) 6 - дефолт, 8 - подруб под новые фичи
Можешь раскрыть немного поподробнее? Какие конкретно туториалы и ситуация с версиями джавы.
По джаве месяца полтора убил на перебор учебников/видеокурсов/текстовых туториалов, чтобы мне хоть немного заходило.
>Какие конкретно туториалы
Какие зайдут, тут уж пробуй. Можешь посмотреть курсы, либо прочесть книгу, можешь последовательно изучать доку и проходить гугловские туторы. советую читать medium Любой из этих вариантов может дать тебе хороший результат.
>ситуация с версиями джавы
Не вижу смысла расписывать особенности версий, об этом много инфы. Ставь минапи 21 и пиши код - по ходу дела столкнешься с необходимостью добавить 1.8, чтобы реализовать те или иные фичи. к примеру, это необходимо фреймворкам с кодогенерацией с помощью аннотаций
Вообще, читай инфу по мере возникновения вопросов в написании кода, иначе ничего толкового не выйдет, если застрянешь на теории. я не знаю твой уровень владения программированием как таковым, поэтому даю новичковый совет
Всегда открывай две студии, пока первая не упала, вторая будет запускаться
Нет смысла.
Всегда юзаю файнбайайди. Новомодный вьюбайдинг не юзал ещё. Погуглил, что-то слишком сложно и заебисто. Буду юзать православный файд бай айди.
С viewBinding же сразу видишь, из какого лайота идет айдишник
> findViewById(R.id.x) будет искать x прежде всего в лайаоте текущей активити, но если не найдет, то пойдет искать вообще во всех лайотах пакета
А что не так?
Как узнавать точные названия зависимостей для градла?
Например, мне нужно заимпортить CardView, а анроидстудио автоимпорта не предлагает (особенно если работаешь в .xml)
Как с рынком дела?
React Native или сайты адаптивные не убивают рынок нативных приложений?
Ну вот я беру андроид студио последнюю. создаю там проект выбираю меню навдрейер и все - больше ничего не делают
запускаю его в эмуляторе - а меню не работает
запускаю на планшете - а меню не работает
норма. это ж андроид разработка
там же 1 активити и куча фрагментов
вопросы:
1 а как вьюмодели соотносятся к фрагментам? не делать же одну вьюмодель
2 а если мне внутри фрагмента нужны еще фрагменты допустм переключать как в основной активити основные фрагменты то тут как делается?
1. во-первых ты путаешь понятия: вьюха и модель - разные вещи. модель вообще по-хорошему одна должна быть, которая полностью соответствует табличке в БД, но одной модели может соответствовать несколько бизнес-сущностей
2. слушай ну тут либо if + else, либо switch case, либо EventHandler (ну делегаты там и прочие штуки, по другому никак)
1 это ты что то напутал. я говорью про ВЬЮмодели, те которые ViewModel. https://developer.android.com/topic/libraries/architecture/viewmodel
и их еще используют как средства шаринга данных между фрагментами и создаю я их в активити
модели и база данных вообще из другой области
2 Я не про это. есть 1 активити и там навигатионхост который и переключает фрагменты
вот боковое меню и контент тому пример. Но если мне точно так же нужно сделать чтобы уже фрагмент выступал как хост для подобного же переклчения
1) У каждого фрагмента должна быть собственная вьюмодель, которая реализует только те юзкейсы, за взаимодействие с которыми он отвечает. Это нужно, это правильно, это создаёт позитивные ограничения.
2) Никакого фрагмента внутри фрагмента быть не может. У тебя есть активити, которая является "энтри поинтом" и контейнером для фрагментов, которые друг друга заменяют, либо накладываются друг на друга(зависит от заданного поведения). Она может содержать логику управления общими UI-компонентами например, прогрессбаром или меню и фрагментами их жц и ограничениями, которые необходимы при работе с навхостом, всевозможные коллбэки или сессионные данные, которые необходимы для правильного поведения фрагментовбандл с маркером для навигации, например.
>>803059
>и создаю я их в активити
Вот этого не понял. ViewModel должна быть отдельным классом/файлом
>Но если мне точно так же нужно сделать чтобы уже фрагмент выступал как хост
Навхост нужен для того, чтобы создать чёткую последовательность действий, которую пользователь не сможет нарушить и зайти "не туда". "Переключать" должна активити - navController должна видеть только она, но ты можешь вызывать её методы через интерфейс, методы которого она реализует.
А что по производительности? Смысл вообще бзать всего одну активити на всю приложуху?
2) ну вот стандартное навигатион дрейер приложение пустое. там одна активити с навхостом и несколько фрагментов страниц
ну вот мы открываем страницу - и внутри же нам нужно мудрить содержимое. А это фрагменты. В обычном приложении у нас есть активити и в нем мы юзаем фрагменты. А мы уже во фрагменте (который в навхосте)
1) кто создает вьюмодель для фрагмента? сам фрагмент?
>и создаю я их в активити
примеры в инете создают вьюмодели в активити и даже если лезут к ним в фрагменте, то снова
pageViewModel = ViewModelProviders.of(requireActivity()).get(PageViewModel.class);
3) и что будет если я захочу сделать подобие навхоста на уровень ниже
то есть мы имеем основную активити и навхост. навхост уводит нас во фрагмент страницы
а внутри страницы у нас слева список, который справа сменяет контент. Причем по тому же принципу что и навхост. Навхост больше неьлзя да? руками пилить обработчики переходов?
есть же какой то "Move to Nested Graph > New Graph". это что?
ну лично я задрался рисовать левое меню на каждой странице с активити
только так я смог подружить с датабиндингом
Всё нормально. Проблемы могут возникнуть в исключительных случаях, но такого рода ошибки очевидны и быстро фиксятся. Смысл юзать? Фрагменты гибче, активити становится своеобразным контроллером, куда можно вынести общую логику. Наибольшее удобство заключается в разделении presentation слоя на отдельные модули, архитектура выглядит стройнее.
>>803254
>В обычном приложении у нас есть активити и в нем мы юзаем фрагменты. А мы уже во фрагменте (который в навхосте)
Вот во фрагменте мы и пишем код.
Представь, что каждый фрагмент - отдельная активити, которую ты запускаешь из одного класса, в котором содержится метод startActivity для каждой из них.
>кто создает вьюмодель для фрагмента? сам фрагмент?
Ты создаешь ViewModel для фрагмента, а затем получаешь реф во фрагменте. Тут нечего выдумывать.
>то есть мы имеем основную активити и навхост. навхост уводит нас во фрагмент страницы
а внутри страницы у нас слева список, который справа сменяет контент. Причем по тому же принципу что и навхост.
Проще всего задать правила, при которых список будет изменять поведение согласно состоянию и использовать отдельный граф.внутри того же навхоста, где может быть много графов, ведь он содержит инфу обо всей навигации, которая у тебя имеется
взял 2 заказа у стремного филлипинца, декомпилял и хакал какое-то местное приложение для такси. Худший экпириентс, но 2 отзыва в карму
Получил 3й фикс заказ за 200 бачей ради отзыва у какого еврея. Перелопатил тонны говнокогда, постоянно делал правки, как он меня заебал, доделай еще то, и это. Чуть его уже нахуй не послал, но он раздобрился, и написал отзыв (на 4 вроде, пидор)
Потом мне повезло и схватил норм контракт на 20$ в час (тоже говнокод индусский, но мне заебись было), сидел несколько лет на нем. это было пиздец давно, потом все фриланс площадки скурвились
Default interface methods are only supported starting with Android N (--min-api 24): void androidx.lifecycle.DefaultLifecycleObserver.onCreate
Мне надо что бы Sdk осталось каким есть, меньше 21, это реально вообще сделать?
>Ты создаешь ViewModel для фрагмента, а затем получаешь реф во фрагменте. Тут нечего выдумывать.
где создаю? не в активити же. Слово реф намекает что вьюмодель создана уровнем выше. А уровнем выше активити. И если она одна на все приложение то получаем вечноживущую активити, что неправильно.
>что каждый фрагмент - отдельная активити
если воспринимать фрагмент как активити в которой еще будут фрагменты, то тогда все нормально - если это правильный подход конечно (что я и выясняю)
>где создаю?
Создаешь класс NameViewModel, который экстендит ViewModel. Инжектишь его, а затем получаешь ссылку внутри фрагмента через nameViewModel by viewModels(), например. Это отдельный класс, который ты связываешь с фрагментом.
>Слово реф намекает что вьюмодель создана уровнем выше
Уровнем ниже, т.к. vm: 1) ничего не знает о фрагменте(и не имеет доступа к контексту, что является best practice), 2) реализует юзкейсы.
>если воспринимать фрагмент как активити в которой еще будут фрагменты
Есть видос с докладом о фрагментах на официальной конференциина канале AndroidDevelopers, попробуй посмотреть его.
Есть. В аутсорс.
Пошел на собес будучи штудентом. Прошел. Принял оффер. Вот уже 3.5 года полет ОК.
Та хз, так получилось. Изначально думал в жову штырьпрайз идти. Но как-то довелось попробовать писать под Ондроед - оказалось, ничего так. Так и пошло-поехало.
> минусы разработки под Android
разработка под Android))))))))))))))))))))) ололо
> рынком
Ну, судя по рынку вакансий ин Юкрэйн, неплохо, весьма неплохо. Да, и сорока напела, что хорошо все с проектами сейчас.
> React Native или сайты адаптивные
Нээээ, ты шо. Не убивают. Пока это остается нишей несмотря на то, что большинство приложений смузятина ебаная это, по сути, тонкие клиенты. Кстати, за все эти реакт нэйтив слышал не очень лестные отзывы, на самом деле - поговаривают, раз на раз да глюк херовый вылезет.
Ясно, что озвучивать никто ниче не собирается и придется юзать бота
Преобразование текста в речь лучше сделать в рантайме или просто тупо сэкономить ресы проца и залить заранее готовые raw для каждой статьи? спс
Фикс, там 50 статей, не 5
Изначально выбор был ограничен тем что мне предложил братишка и тем, что был только Windows ПК. На этом этапе знания про iOS разработку были на уровне пары статей из интернета. Затем пока готовился к вкату, работая на другой работе накопил на Macbook Air 2015 и даже тогда не посмотрел в сторону iOS разработки. А потом когда устроился на первую работу Android-разрабом, то там вообще как-то не до изучения новой платформы было.
Зарплаты там и правда выше по сравнению Android, потому что специалистов гораздо меньше на рынке труда, а толковых тем более.
Хранить локально все эти статьи не очень хорошо, потому-что твое приложение будет весить необоснованно дохуя. Сейчас есть технологии которые могут тебе позволить все сделать в рантайме.
А может просто из интернета их выкачивать при необходимости? Я думаю это будет оптимально
Да, как вариант. Но тут уже нужно заморачиваться с воспроизведением аудио по ссылке.
Есть спиннер на вьюхе, значение для которого пользователь обязан выбрать. Если ниче не выбрано - вывести предупреждение
Я правильно понимаю, что предупреждение нужно выводить с помощью каллбэка спиннера OnNothingSelected? Спс
Короче, есть активити. Она запускает новую активити по прошествии некоторого времени, при этом новая активити должна получить некоторые данные с нашей первой активити
Как лучше передать эти данные?
1. Через putExtra или
2. Сделать поля с данными первой активити статическими и считать их содержимое уже в новой активити
Плз. Спасибо!
Да
Можно в intent которым ты открываешь вторую активити из первой, положить нужные данные в Bundle, во втором активити эти данные получить.
Либо sharedViewModel, но если данные какие-нибудь примитивы, тогда проще первый вариант использовать.
Еще можно создать singleton репозиторий и к нему обращаться из любого места в приложении, но боюсь не осилишь этот вариант.
Никаких статических полей, только бандл.
>>804773
>singleton репозиторий и к нему обращаться из любого места в приложении
Если тебе нужен репозиторий, чтобы передать данные из одной активити в другую, значит ты уже сделал что-то не так. перемудрил
>>804817
>как бы сделал сеньор?
Делал бы всё в одной активити
юзал бы бандл
private MutableLiveData<UIState> uiStateLiveData = new MutableLiveData<>();
private UIState uistate = new UIState();
private void someLogic(){
uistate.show_progress_bar = true;
uistate.button_exit_enabled = false;
uiStateLiveData.postValue(uistate);
}
нет. активити тоже
Как по мне тут излишне держать глобальную переменную для модели. Если ты так делаешь, то скорее всего у тебя поля в модели изменяемые.
Нет. ViewModel не должна вообще чем-либо управлять, тем более UI, она может только провайдить что-то. Ты можешь создать LiveData и засовывать туда что-либо, а затем изменять состояние внутри активити/фрагмента, исходя из тех данных, которые туда приходят, либо их наличия как такового, но все методы, которые влияют на состояние, либо объекты, которые содержат в себе информацию о нём, должны быть созданы в a/f.
Тогда какой толк от ViewModel, если там нельзя разместить всю логику?
Где её тогда размещать и как тестировать?
Мне нужно отобразить 3 снекбара и 1 диалог, в зависимости от настроек системы.
Читай про Clean Architecture
>Тогда какой толк от ViewModel, если там нельзя разместить всю логику?
Уже отвечал, что там можно размещать только данные, в т.ч. и о состоянии. Почитай о шаблонах и компонентах
>где размещать
В активити
>как тестировать
Отдельно тестировать UI и VM
>Мне нужно отобразить 3 снекбара и 1 диалог, в зависимости от настроек системы
В singleactivity это пишется в активити. VM может хранить данные о состоянии, т.к. находится в presentation слое, но не может содержать логику управления.
Привет, анонимы. Есть вопрос. Знает ли тут кто-нибудь как сильно ебёт модерация Гугла при опубликовании приложения в Google Play? Проверяют ли они по какой лицензии распространяются картинки, используемые в приложении или в каком стиле оформлен дизайн приложения? Можете обрисовать подводные камни при публикации, если не сложно? Был бы очень признателен :3
Создают же рядом layout файлы и потом include их в основной.
>>805854
В Entities бизнес логика
В UseCases логика приложения.
Но если экран маленький то и во вью модели офк делать можно.
>>804817
не клал бы в бандл. Хотя, спорно. Но лучше не завязываться на такое говнецо. Ох вспоминанию эти бандлы при открытии новых окон в ведройде...
>>803880
На начальном этапе. Потом одинаковы, как и у всех. Я накопил денег а потом в айос перебежал. Здесь лайтовей, приятней, без костылей. Без вот этих
>>795385
>В анроидах 8.0+ выпилили старый конструктор метода requestFocusAudio(...)
>minimum SDK стоит ниже 26,
мимоиосник. вспомнил молодость.
>Создают же рядом layout файлы и потом include их в основной.
я как раз про количество файлов. там же одноуровневый список файлов разметки.
>>804658-кун
>внутри View
Внутри активити. активити - не вью
Активити не должна быть слишком большой god object'ом с таким подходом, потому что ты создаешь и переиспользуешь все необходимые компоненты, которые тебе нужны(всевозможные бары и менюшки). Реализацию она содержит только в том случае, если её невозможно запилить в другом месте во фрагменте. Всю остальную юайную логику, которую ты можешь реализовать "на месте"во фрагменте, ты пилишь именно там. Любая реализация должна быть уместна, тогда не будет никаких проблем.
С чего, собственно начать? Писал что-то буквально 15-20 лет назад последний раз и то на ассемблере, паскале и т.п. так что нулевой в общем.
Что читать, куда смотреть, за что хвататься? Цель довольно прозаична - нужны бывают приложения которых нет, простые довольно (калькулятор по техкартам, калькулятор растворов, расчет параметров продукта по температуре времени процесса и т.п.), мелочи, которые чуть ли не в бейсике можно реализовать в принципе, но нужно в телефоне и удобно, потому что для тупых. В перспективе, конечно, хотелось бы все калькуляторы вместе свести, техкарты сделать интерактивные и т.п. Но пока хотя бы азы.
Java, сайт StartAndroid - чтобы быстро начать делать хоть что-то(для твоих целей сойдет, судя по всему)
Более серьезно - лучше найди шапку старых тредов
Котлин требует знания JDK поскольку сам обладает довольно скудной стдлибой.
>В Entities бизнес логика
>В UseCases логика приложения.
Такой воды полно везде. Говори конкретно.
Clean architecture читал - вода водой, очевидные вещи.
Единственное что полезно из этой дискуссии:
- viewmodel только для сохранения состояния
- вся логика текущего экрана внутри fragment/activity
Погуглил, что для этого нужно, но не совсем понял, какие инструменты уже легаси и их не нужно смотреть и на что нужно смотреть как сегодняшние инструменты с перспективой.
Я так понел, сразу в Котлин вкатываться и пропустить яву?
мимо всю жизнь кое что делал на питоне
>Я так понел, сразу в Котлин вкатываться и пропустить яву?
да. жава выучится в ходе гугления "а как сделать это".
>и на что нужно смотреть как сегодняшние инструменты с перспективой.
сразу aac (навигация, биндинг, вьюмодели, обсервабле бла бла)
нет смысла изучать то что устарело
туда же нафиг не нужны всякие убогие средства с многопотоком, когда есть корутины.
лишь бы от котлина не тошнило
и от андроида )
Ну в следующие 10 лет андройд юзеров будет более 5 миллиардов, так, что я думаю найти себя в области с наибольшим количеством юзеров так сказать.
>сразу aac (навигация, биндинг, вьюмодели, обсервабле бла бла)
Гугл выдает непонятное про кодеки, можно транслейт
https://kotlinlang.org/
Вообще меня тут обучат так я понел? и нужно ли делать приложухи вместе с индусами с ютуба для оптимального обучения?
aac- Android Architecture Components
это они посидели подумали и наконец выдали что-то удобоваримое. И стало сильно лучше.
>Вообще меня тут обучат так я понел?
в шапке есть ссылка котлин для питонистов. почитай ужаснись
меня да
в андроиде вся та канитель с вьюхами, инфлатерами, адаптерами
а в котлине они решили улучшить жаву, да переборщили с синтаксисом. Сложно распарсивать глазами и собирать суть.
меня в итоге выбесило и я ушел на хамарин с его каким никаким, но xaml
Лучше объявлять, так чище и понятнее
Сюп. Не знаю, туда ли зашел, но может сориентируете? Сколько примерно стоит разработка приложения по моему ТЗ? Приложение, допустим, нечто вроде простого агрегатора такси: карта города, на ней видны водилы/пассажиры, прикручена оплата. Описал просто примерно для оценки, на самом деле суть приложения будет другая. Профессиональная разработка не нужна, нужна просто заглушка в гугл-плэй для теста ниши, сойдет любой говнокод, лишь бы хоть как-то работал. Сколько за такое просить и где вообще искать разрабов?
не может найти сеттер
пишу конвертер
@BindingConversion
fun convertNullableLongToString(value: Long?): String? {
return value?.toString()
}
работает, но подчеркнуто красным. мол в сеттер лезет MutableLiveData<Long>
ну думаю может ему трансформацию. нужно
делаю трансформацию
@BindingConversion
fun convertMuttableLiveDataLongToString(liveData: MutableLiveData<Long>): LiveData<String> {
return Transformations.map(liveData) { uiii -> uiii.toString() }
}
(сука ебучий спам лист бестолковый)
красное подчеркивание исчезает и все работает.
Но удаляю первый конвертер convertNullableLongToString и он не собирается
"Cannot find a setter for \u003candroid.widget.TextView android:text\u003e that accepts parameter type \u0027androidx.lifecycle.MutableLiveData\u003cjava.lang.Long\u003e\u0027\n\nIf a binding adapter provides the setter"
да ну бред пит какой то. Как правильно то прописать?
80 тр, делал такое и заказчика тоже здесь нашел.
Сроки 2 недели, дольше там нечем заниматься. При условии, что серверная часть готова.
Не возьмусь, дел много.
Не часто. Ничего сложного.
опять приходится писать костыли для EditTextPreference, потому что android:inputType="number" или android:inputType="numberDecimal" бесполезны ибо вылезает полная клавиатура, а также сохраняется в преференсес строка, а не Int
Это я какую то доку не прочитал или все так и осталось как и было раньше через жопу?
если ты с 2013 то часто
а как sd карта относится к постоянной записи на нее файлов? Нет ли какой-либо деградации?
Я впервые разрабатываю приложение на андроид, где нужна база, и по старой бекендовской привычке решил что это должен быть СКУЭЛЬ и официально(с) рекомендуемая(с) ОРМ(или вроде того) от Гугла.
Однако я вдоволь наебался уже на данном этапе (имея порядка 15 таблиц) с сохранением связанных структур и ограничениями Room'а, который в целом смахивает не на ОРМ, а на тонкую прослойку-помощник.
Вопрос простой - есть ли у анона действительно приятный ОПЫТ работы с какими-либо еще ОРМ-ками? Возможно, более БОГАТЫМИ в плане функционала. Возможно не SQL, хоть и не желательно.
Сначала чекаешь возможность записи. Если её нет - просишь разрешение.
Затем чекаешь наличие sd-карты(secondary external storage), иначе пишешь в primary.
fun checkSecondExternal() = getExternalStorageState() == MEDIA_MOUNTED && isExternalStorageRemovable() импорт из android.os.Environment, но можно делать такое и через контекст
Флаг MEDIA_MOUNTED - смонтрован ли external, isRemovable - является ли он sd-картой.
Далее получаешь путь и используешь.
>Room
Если нужно сделать что-то простое или на скорую руку, то норм. Для чего-то более сложного выберу скорее SqLiteгибче, но, опять же, зависит от задачи.
>Room'a, который в целом смахивает не на ОРМ, а на тонкую прослойку-помощник
Так и есть, это сахарный слой. Гугл рекомендует юзать именно Рум, дабы была возможность ловить ошибки, а не щёлкать клювом, когда у тебя что-то ломается.
Есть ещё Realm, он вполне себе хорош, ничего плохого не скажу. не помню, на самом деле, но проблем с ним точно никогда не было
Все ОРМ говно по определению, потому-что:
1) Ограничивают тебя в написании SQL(тьюринг полного языка, между прочим).
2) Код превращается в кашу из аннотаций с SQL'ем внутри них, когда у тебя более-менее сложная модель и кастомные SQL запросы
Попробуй SQLDelight.
>SqLite гибче
Но ведь room не запрещает разработчику использовать SQL напрямую?
>была возможность ловить ошибки
То верно, это очень годно, но цена тому весьма раздутый слой логики работы с бд, он чуть меньше, чем если бы писать везде сырой sql, но намного больше, чем на бекенде с полноценными ORMками и прочими activerecord'ами.
>>813014
1-2 - все так, да.
Посмотрю SQLDelight, спасибо
>Но ведь room не запрещает разработчику использовать SQL напрямую?
Да, но смысл в том, что я бы не стал тащить Room в проект, где уже используется SqLite.
спасибо! потратил время на меня, привел кусок кода. Мое увожение. Благодраствую от души. Приятно с такими людьми на борде одной находиться!
>а на тонкую прослойку-помощник.
А оно это и есть. Схему создает, миграции может, CUВ простой и R маппинг на POKO объекты.
Необходимый минимум без оверхедов. Самое оно для андроида
Использую их для фоновых задач, но почему они прекращают работу после закрытия приложения (свайпом из недавних)? Я уже что только не пробовал (BroadcastReceiver, Service, Worker, и.т.д), из всего работу не прекращает только Foreground Service, но уведомление висит ненужное. Ебал я эту политику энергосбережения
Подозреваю сейчас Xamarin в этом, может, следовало на жабе писать
>Подозреваю сейчас Xamarin
А он тут причем? Это политика андроида, начиная с oreo
Если нужно работать постоянно, то юзать нужно Foreground Service с иконкой
Как хак можно собрать под более раннюю версию SDK - тогда андрюша будет считать что приложуха не знает про новые правила анальных ограничений и не ограничивать их, имхо. (в моем случае это помогло, а так то я нихера не знаю)
Ну, вообще, потому что так модно. Серьезно. В принципе, пользователь не узнает что там "под капотом". Да ему и пофиг что там. Но дань моде - это дань моде, ей нужно следовать безпрекословно. Чтобы было все прогрессивно, cutting edge, так сказать.
Это как есть отсталые реднеки прошлого века со своей маскулинностью и вот этим своим "КАКМУЖЫК", а есть современные толерантные прогрессивные молодые люди, которые поддерживают идеи феминизма, BLM, экологической борьбы и так далее. Это, в принципе, одна из главных определяющих характеристик не только отрасли мобильной разработки, но и человека в принципе.
>Чем же?
мы щас о чем говорим? я про конкретную реализацию даггер2
А так DI понятно зачем нужен. это ж DI.
>Ну, вообще, потому что так модно. Серьезно. В принципе, пользователь не узнает что там "под капотом". Да ему и пофиг что там. Но дань моде - это дань моде, ей нужно следовать безпрекословно. Чтобы было все прогрессивно, cutting edge, так сказать.
гуморыст
Если ты пишешь "зеркало" или просто размазываешь код в одной активити, то да - можно вообще не запариваться. Если же ты пилишь что-то более сложное и имеющее намёк на структуру, di сэкономит время. надеюсь, что телега про определяющие характеристики - рофл, потому что это действительно забавно
>>815171
>мы щас о чем говорим?
Об этом:
>он на андроиде кошмарен
Почему он кошмарен?
Окей, что именно тебя не устраивает в реализации даггера? di-утилиток много, так-то. Не можешь в даггер - бери то, что попроще, либо просто больше нравится
А какие еще di с кодогенерацией не в рантайм?
мимо си девелопен
>девелопер
А что тебе от приложения надо-то? Уже несколько лет даже нейронки и обработку фото/видео гоняют полностью на клиенте, мощностей для такого хватают.
>Где б почитать про плюсы минусы?
Плюсы и минусы для какого приложения?
Тут вопрос вообще-то к тебе — нужен ли сервер для работы твоего приложения (оно клиент-серверное, нужна синхронизация, пользователи должны авторизоваться в твоём сервисе, тебе надо рассылать пуши/прочий спам и тд). А даже если нужен, то можешь взять какой нибудь BaaS типо Firebase и шлёпнуть на нём за пару дней весь функционал.
А если не нужен — из плюсов: работа оффлайн, прайваси.
Из минусов: твой рокетсаенс будет жрать батарейку и греть телефон как тварь, конкретно на андроиде куча девайсов за 5000р, пользователи которых будут отгружать тебе в стор тонны говна в виде комментов "нихуя ни работаит разраб кривой аптимизируй сука(9".
Короче, блядь, напиши что именно ты хочешь сделать, так консультировать — это как помогать искать сегфолт без кода, лол.
Доход типо чисто на рекламе?
Теперь я изучаю официальные гайды от гугла. Планирую пройти все эти 20 секций на пикриле к январю, за эти две недели изучил все по Activity - каждая страница была мною прочитана раз по 5 + воспроизводил на память все самплы кода, которые они там приводят. Конечно, там дофига инфы и я уже что-то забыл, но процентов 70-80 в памяти осталось.
Как вам такая стратегия изучения? К середине зимы хочу писать код, юзая все компоненты джетпака, что-то вроде такого: https://github.com/android/sunflower
Мечтаю вкатиться на удаленку.
Так я пишу небольшие приложухи + все их самплы. Вижу, например, что они советуют оверрайдить onBackPressed только в случае создания confirm quit диалога, и при этом все равно вызывать родительскую имплементацию внутри, - пишу пустую приложуху с этим confirm quit.
Типа к зиме-весне теоретических знаний у меня будет как у милда, опыта - как у джуна++, я думаю (надеюсь), с этим можно на удаленку или даже фриланс идти.
+ хорошие знания в material design, я типа дизайнер вообще
так ты пиши большую приложуху
конечно будешь тупить на каждом шагу ну и что
так и учатся.
и сразу котлин лучше
Ну хз, я в начале сентября как раз сел писать большое приложение - и это пиздос, просто постоянный гуглеж + слабое понимание того, что нагуглить все-таки получилось. Тот же гугловский гайд Navigation components ты слабо поймешь, не прочитав их Activity и Architecture components, а ведь это основа
ИМХО будет быстрее поступательно двигаться, 100 мелких-мелких приложух, а потом уже писать большие
Но я слышал стори, что не каждый джун способен внятно рассказать, что такое активити, например. И их все равно на работу берут. Это правда? Мб я тогда рили оверкиллингом занимаюсь, хз
Экран, занимающийся отрисовкой UI. Более общно, это основной компонент любой приложухи; активити работают сообща внутри приложения, но при этом слабо связаны между собой. Использование приложений на десктопах и мобилках отличается тем, что на мобилках юзеру часто нужен конкретный функционал в приложении, а не его стартовый экран и т.п. - и ввиду того, что активити слабо связаны между собой, из приложения А мы без особых проблем можем запустить нужное нам активити приложения Б. Активити может находиться в состояниях Resumed (foreground), Paused (потеряло фокус, может быть частично видно или полупрозрачно), Stopped (не видно совсем), причем реализовывать поведение компонентов, зависящих от текущего стейта жизненного цикла, лучше с использованием API LifecycleObserver, а не в callback-методах onCreate, onStart, onResume, onPause, onStop, onDestroy. С помощью lifecycle-aware компонентов мы должны сохранять стейт, очищать инициализированные ресурсы (но но увлекаться этим в ходе Stopped стейта, потому что он очень короткий), переходить к меньшему потреблению мощностей (например, не так часто обновлять местоположение пользователя).
Если нужны ресурсы, то система никогда не разрушает напрямую активити, а только процесс, хостящий активити, причем стейт процесса соответствует жизненному стейту активити, в порядке убывания важности: Resumed, Paused, Stopped. При этом даже после того, как система вызвала onDestroy, она сохраняет визуальный стейт активити в Bundle instanceState; реуомендуется не держать в визуале больше 50KB инфы. Можно положить в этот бандл и другие свои данные с помощью onSaveInstance, но не рекомендуется увлекаться, чтобы избежать лишних затрат на сериализацию и десериализацию. Если данных много, то их нужно хранить с помощью ViewModel. Сам ViewModel мы должны очищать только в случае, если юзер эксплицитно клозает активити (нажимая на Back Button, например), мы не должны трогать вьюмодель, если чел просто перешел в multiwindow режим или перевернул девайс - определить че происходит можно с помощью isFinishing(), если все-таки экспилицтное завершение, то очистить вьюмодель с помощью onCleared(). Вьюмодель никогда не должна юзать Context, никогда не должна генерировать данные (только запрашивать).
Вместе активити составляют Task - задачу по реюзабилити различных активити (не обязательно одного приложения) в целях пользователя. На уровне абстракции Task, активити хранятся в back stack и не могут перемещаться внутри него - только удаляться или добавляться (last in, first out). Начало любого таска происходит в app launcher'е
Не принимал во внимание, что в приложухе должна быть скорее одна активити, суть ясна.
Норм если такое на собесе выдам? За милда сойду?
БЛЯТЬ ХОЧУ НА ФРИЛАНС
Экран, занимающийся отрисовкой UI. Более общно, это основной компонент любой приложухи; активити работают сообща внутри приложения, но при этом слабо связаны между собой. Использование приложений на десктопах и мобилках отличается тем, что на мобилках юзеру часто нужен конкретный функционал в приложении, а не его стартовый экран и т.п. - и ввиду того, что активити слабо связаны между собой, из приложения А мы без особых проблем можем запустить нужное нам активити приложения Б. Активити может находиться в состояниях Resumed (foreground), Paused (потеряло фокус, может быть частично видно или полупрозрачно), Stopped (не видно совсем), причем реализовывать поведение компонентов, зависящих от текущего стейта жизненного цикла, лучше с использованием API LifecycleObserver, а не в callback-методах onCreate, onStart, onResume, onPause, onStop, onDestroy. С помощью lifecycle-aware компонентов мы должны сохранять стейт, очищать инициализированные ресурсы (но но увлекаться этим в ходе Stopped стейта, потому что он очень короткий), переходить к меньшему потреблению мощностей (например, не так часто обновлять местоположение пользователя).
Если нужны ресурсы, то система никогда не разрушает напрямую активити, а только процесс, хостящий активити, причем стейт процесса соответствует жизненному стейту активити, в порядке убывания важности: Resumed, Paused, Stopped. При этом даже после того, как система вызвала onDestroy, она сохраняет визуальный стейт активити в Bundle instanceState; реуомендуется не держать в визуале больше 50KB инфы. Можно положить в этот бандл и другие свои данные с помощью onSaveInstance, но не рекомендуется увлекаться, чтобы избежать лишних затрат на сериализацию и десериализацию. Если данных много, то их нужно хранить с помощью ViewModel. Сам ViewModel мы должны очищать только в случае, если юзер эксплицитно клозает активити (нажимая на Back Button, например), мы не должны трогать вьюмодель, если чел просто перешел в multiwindow режим или перевернул девайс - определить че происходит можно с помощью isFinishing(), если все-таки экспилицтное завершение, то очистить вьюмодель с помощью onCleared(). Вьюмодель никогда не должна юзать Context, никогда не должна генерировать данные (только запрашивать).
Вместе активити составляют Task - задачу по реюзабилити различных активити (не обязательно одного приложения) в целях пользователя. На уровне абстракции Task, активити хранятся в back stack и не могут перемещаться внутри него - только удаляться или добавляться (last in, first out). Начало любого таска происходит в app launcher'е
Не принимал во внимание, что в приложухе должна быть скорее одна активити, суть ясна.
Норм если такое на собесе выдам? За милда сойду?
БЛЯТЬ ХОЧУ НА ФРИЛАНС
можешь ты знать как угодно
но вот такое вывалить - и будет казаться что джун по верхам почитал там по бырому и воду наливает. Вроде инфы много, а кажется что знания пытаешься водой залить
джун. конечно джун. мама подтвердит
а вот джун-разработчик ли - это хз
Но по написанному впечатление что у тебя в голове просто каша. То есть ты явно читал, но не видно того, что ты понимаешь само устройство что да как
>Вьюмодель никогда не должна юзать Context, никогда не должна генерировать данные (только запрашивать).
Молодец, я об этом постоянно говорю карликам, а они всё равно продолжают спрашивать о том, как закостылить контекстно-зависимую фичу внутри vm.
>Не принимал во внимание, что в приложухе должна быть скорее одна активити, суть ясна.
Изучай фрагменты в контексте single activity и сопряженных с подходом ограничений и требований которые, в свою очередь, непосредственным образом связаны с архитектурой. Это в набольшей степени актуально и очень качественно тебя забустит.
>Норм если такое на собесе выдам? За милда сойду?
Как тебе сказать. Кто-то оценит, кого-то это не заинтересует, тут уж зависит от предпочтения собеседующего и того, на чем строится его механизм оценивания. Говоря о собеседовании, первостепенная задача - показать, что твои знания покрывают весь цикл разработки и структурированы в достаточной мере, чтобы иметь четкое представление о каждом этапе построения приложения как системы. Сюда же относится знание используемых технологий, подходов и принципов, которые направлены на построение максимально эффективного рабочего процесса. Важна не столько "площадь покрытия" теории, сколько способность работать в контексте недетерминированности алгоритма построения многокомпонентной системы, включая возможность качественно анализировать и соотносить достоинства и недостатки потенциального способа решения задачи, а ещё сроки, возможности и другие плюшки. Но если говорить проще, ты должен показать, что уровень твоей квалификации достаточен для того, чтобы самостоятельно принимать те или иные решения. это особенно актуально для удаленки Фриланс же отличается тем, что тебя оценивает только твой клиент, поэтому и требования несколько иные, так как ты имеешь возможность адаптировать рабочий процесс под себя, игнорируя чужие требованиялида/команды, формалистского подхода как такового, хотя сделать это не так просто, как может показаться, имея дело с заказчиком, которому просто нужен готовый продукт.
>Вьюмодель никогда не должна юзать Context, никогда не должна генерировать данные (только запрашивать).
Молодец, я об этом постоянно говорю карликам, а они всё равно продолжают спрашивать о том, как закостылить контекстно-зависимую фичу внутри vm.
>Не принимал во внимание, что в приложухе должна быть скорее одна активити, суть ясна.
Изучай фрагменты в контексте single activity и сопряженных с подходом ограничений и требований которые, в свою очередь, непосредственным образом связаны с архитектурой. Это в набольшей степени актуально и очень качественно тебя забустит.
>Норм если такое на собесе выдам? За милда сойду?
Как тебе сказать. Кто-то оценит, кого-то это не заинтересует, тут уж зависит от предпочтения собеседующего и того, на чем строится его механизм оценивания. Говоря о собеседовании, первостепенная задача - показать, что твои знания покрывают весь цикл разработки и структурированы в достаточной мере, чтобы иметь четкое представление о каждом этапе построения приложения как системы. Сюда же относится знание используемых технологий, подходов и принципов, которые направлены на построение максимально эффективного рабочего процесса. Важна не столько "площадь покрытия" теории, сколько способность работать в контексте недетерминированности алгоритма построения многокомпонентной системы, включая возможность качественно анализировать и соотносить достоинства и недостатки потенциального способа решения задачи, а ещё сроки, возможности и другие плюшки. Но если говорить проще, ты должен показать, что уровень твоей квалификации достаточен для того, чтобы самостоятельно принимать те или иные решения. это особенно актуально для удаленки Фриланс же отличается тем, что тебя оценивает только твой клиент, поэтому и требования несколько иные, так как ты имеешь возможность адаптировать рабочий процесс под себя, игнорируя чужие требованиялида/команды, формалистского подхода как такового, хотя сделать это не так просто, как может показаться, имея дело с заказчиком, которому просто нужен готовый продукт.
Спасибо
>как закостылить контекстно-зависимую фичу внутри vm.
Вопрос как вопрос. ну не должна вьюмодель знать про контекст. Она должна знать тех, кто имеет право знать про контекст. И это не костыли, а норма как бэ
Как закостылить - читай: как передать контекст в vm
Нужно для тестирования относительно легковесных приложений. Думаю, что одним эмулятором обойтись не получится, а сам пользуюсь яблоком.
Глянул цены на сяоми, охуел. Думал, что раза в два дешевле.
>Глянул цены на сяоми, охуел. Думал, что раза в два дешевле.
и при этом цена на яблоко тебя не смущает. гм.
Пока писал пост, самому смешно с этого было.
С меня 1000 бочек нефти
960x533, 1:37
Вкатывальщиков в этом треде дохуя, поэтому освящаю тред
Всем привет
Бля, шапка проебана, а я как раз вкатывальщик
Нужно для своих нужд написать андроид-приложение, по функционалу похожее на навороченную записную книжку, которая в себя будет аккуратно упаковывать данные, ну и проводить с данными всякие там действия, нужные мне.
Потенциально было бы здорово синхронизировать данные с Гугл аккаунтом, но это уже потом, сильно потом
Остановимся на записной книжке
Но я вообще хз, на чем писать это самое приложение
Есть какой-то признанный хотя бы парой анонов туториал степ-бай-степ гайд? Ну, какие-то основы, базовые вещи для приложения, чтобы познакомиться с языком / языками / спецификой?
Короче, авторитеты, посоветуйте, с чего начать ньюфагу?
В программировании е
что значит "на чем писать"?
на том что знаешь конечно.
под андроид можно на многих языках писать
Игры например?
Или приложения?
Или под Андроид можно писать на многих языках, как сообщил анон выше?
А на Питоне можно работать?
жава просто нативный (ну теперь и котлин)
так что если знаешь жава или котлин то на нем и пиши
если дарт то flutter
если шарп то хамарин
если питон то kivy
если жс то там свой набор говна
всё. это ж жс. а уж электрон софт я себе даже не ставлю. не заслуживает это говно чтобы я на него ресурсы системы тратил
Я сейчас учу Питон, и насколько я понял - это язык BackEnd.
Мне нужно изучать JavaScript для FrontEnd?
тогда придется есть это дерьмо
правда это уже не про андроид
а вообще если есть возможность не трогать фронт лучше не трогать.
Точно.
Ладно, крайний вопрос: если я буду создавать игру с открытым миром на Андроиде, Python Kiwi позволит мне реализовать это максимально хорошо?
Или лучше юзать Java и Kothlin?
>>818998
Такой вопрос: а kivy норм?
Я просто имею некий (именно некий) бэкграунд в питоне, так что на бумаге киви будет вполне себе хорошим выходом, тем более, что мне не нужно пилить какое-то хитровыебанное шустроработаюшщщее приложение
Но kivy (судя по видосам) показался мне каким-то суперхитровыебанным, то ли приложение упаковывалось хуй пойми как, то ли что-то ещё, короче, что-то меня смутило.
Так kivy норм?
И если не kivy, что из этого попроще?
>жава просто нативный (ну теперь и котлин)
>так что если знаешь жава или котлин то на нем и пиши
Это проще, с учетом того, что я язык не знаю? Хотя и питон я не знаю, так, костыли умею хуячить...
Бля, с первого раза kivy не установился. И почему я не удивлен?
все что не нативное - априори шаманство. Даже нативное это шаманство, но проще найти решение
Бери Джаву или Котлин что понятнее, ищи тутор по созданию записной книжки, затем пытайся запилить все те фичи, которые тебе нужны, имея какую-то основу. Думаю, это самый простой вариант. да и задача простая
На Kivy ты далеко не уедешь, имея "некий" бэкграунд, так что лучше не трать время.
Так есть варианты успеха для написания приложения уровня записной книги на питоне, или лучше (как советует анон ниже) взять что-то javakotlin?
>>819140
А все непонятно
Тут мы возвращаемся к тому, за чем я пришел в тред
А есть какой-то окологодный тутор, который можно использовать как отправную точку? Мало ли есть что-то, что признано аксакалами треда. Что-то, что даст большее понимание, чем какой-то видос уровня "на котлин за 30 минут без знания языка!"
чем нативнее язык тем удобнее средства разработки и возможности и гугление
и с выходом котлин и aac стало более менее приятно кодить на андроид (до этого был лютый ад для мазохистов)
сам я шарпист, но предпочитаю котлин, а не хамарин просто потому что намного меньше костылить нужно
если ты питонист то поможет это чтиво
https://github.com/Khan/kotlin-for-python-developers
Пытаюсь отправлять данные из одного фрагмента в другой без использования viewmodel с использованием fragment manager. По необъяснимой причине не получается проставить листнер в принимающий данные фрагмент
по гайдам гугла, чтобы засеттить такой лиснер, нужно вызвать getParentFragmentManager().setOnFragmentResultListener( ... ), но, бля, оно не вызывается! тупо у фрагмента даже нет метода getParentFragmentManager()
пробовал через getParentFragment().getFragmentManager(), но у этой хуйни все равно нет сеттера setOnFragmentResultListener( ... )
че это вообще такое? как это понимать? минимальная сдк проставлена 21, все норм. гайд от гугла, в котором они все это каким-то образом делают: https://developer.android.com/training/basics/fragments/pass-data-between
все, разобрался
эта фигня в альфа версии, нужно импортить androidx.fragment:fragment:1.3.0-alpha08
Как-то ничего околонормального не могу найти
Разве что
https://www.youtube.com/watch?v=pjsADVZh45I&list=PLyfVjOYzujuj20Y-3kVhT3Zro9CrMNgNS&index=3&ab_channel=StartAndroid
Насколько это нормально?
По каким критериям ты определяешь нормальность? Ознакомься с разными, а далее смотри те, что зайдут.
1-2 недели
>Простой sqllite должен выпиливаться
Ты либо юзаешь sqlite, либо полностью его выпиливаешь и переходишь на room. Иначе тебе придется разгребать ещё больше.
Маркету пофигу, а вот одна MDM ругается, что в первом варианте приложение не подписано.
Я нихуя не понимаю, что не так с моим кодом пикрил
Вызываю интенты, но они НИХУЯ не запускают соответствующие активити, вызывается только диалог "Share", содержащий вообще какие-то левые хуйни
mindsk 30, на эмуляторе стоит API 30
Спс за помощь
minsdk 21 конечно
ебать я сука брейки забыл добавить
Разбей на методы, используй разные лисенеры
Я тоже не понимаю, что может нравится в банальном формошллёпстве под андроид. Не Энтерпрайза, не бизнес логики, ничего. Какой то джаваскрипт под телефон. Взял данные с апи и отобразил, скукота для школьников. Вот и спрашиваю, как может нравится писать под андроид, посколько не особо понимаю, что в этом может нравится
интенты это самое уебищное что есть в андроиде
вот почему нахуй сука интент пикрил без проверки запускается, а с ней - хуй там? КАК ТАК БЛЯТЬ ПОЧЕМУ СУКА RESOLVEACTIVITY ВОЗВРАЩАЕТ НОЛЬ КОГДА СУКА У НАС ЕСТЬ ЕСТЬ НАХУЙ АКТИВИТИ ДЛЯ ОБРАБОТКИ АКШНА КАК БЛЯТЬ КАК НАХУЙ ТАКОЕ ВОЗМОЖНО
проверка через packageManager.queryIntentActivities(...) тоже дает ноль (пустой список)
ну как
ебана
Пукич свой остуди. С 30 апи теперь нельзя просто взять и палить список установленных приложений.
https://developer.android.com/training/basics/intents/package-visibility
RecyclerView знает ширину себя и количество колонок. но он не может же знать конечную высоту картинки. И если используя scaleType и adjustViewBounds картинка впишется не теряя соотношение сторон, то высота строки будет куда больше.
я не нашел способа задать ему начальные ширину высоту от которой бы он вел отсчет при скалинге.
Я решил тем, что вычисляю высоту строки при создании холдера, но блин это ж не дело.
В данный момент возникла необходимость сделать несложное мобильное приложение, человеку будет выводиться карточка с информацией.
В мобильной разработке я нолевой ноль.
Масштаб времени - месяца три.
На какой стул мне сесть? Флаттер? Или реактНатив на обычном реакте могу немношко писать?
И вообще возможно за три месяца изучения по паре часов в день что то адекватное запилить? Или больше ремени уйдет?
Чтобы было более ГИБКО и кастомизируемо.
Например, выводить все элементы по дефолту, когда поиск пустой, или чтоб выделять наматченную подстроку.
Погуглел библиотеки, но годноты не нашел
Приветствую аноны. Подскажите вкатывальщику - решил вкатываться в андроид. Стоит ли сразу учить котлин или же для начала изучить джаву?
Почему спрашиваю? Опять же если начинать с джавы это займёт N-e количество времени, а моя цель скорейший вкат.
Решил спросить у знающих людей, вместого того что бы слушать водянистые ролики на ютюбе или ответы из гугла в стиле >пук >кок.
Добра.
Что пилешь анон? Игры? По какой модели дейстуешь?
Тупей и проще или качественно и дороха?
3d/2d ? Если 3д в блендере модельки делаешь? Лоу поли?
>И вообще возможно за три месяца изучения по паре часов в день что то адекватное запилить? Или больше ремени уйдет?
Если твоя цель только одна мелкая приложуха то быстрей, намного быстрей.
>На какой стул мне сесть? Флаттер? Или реактНатив на обычном реакте могу немношко писать?
Флатер офкорс
>В данный момент возникла необходимость сделать несложное мобильное приложение, человеку будет выводиться карточка с информацией.
Если правильно понял твою цель, то за 2 недели на изи состряпаешь.
>Но я слышал стори, что не каждый джун способен внятно рассказать, что такое активити
Ты бы видел меня как я начал маня-маневры делать 3 года назад на собесе при подобном вопросе и очень удачно сменил тему. В итоге устроился на галеру с первого же собеса, оче повезло что интервьеру понравился нет не пидор , суть заключается не в том знаешь или не знаешь , а как ты это подаешь.
>>если правильно понял твою цель, то за 2 недели на изи состряпаешь.
Думаю правильно, на сервере есть данные, человек на приложение через api сервера должен получать json с данными.
Сервер на пхп делают? Или сразу лучше nodejs?
>>Если твоя цель только одна мелкая приложуха то быстрей, намного быстрей.
Спасибо обнадежил. Значит буду изучать флаттер.
>каком стиле оформлен дизайн приложения
Проверяют
>Проверяют ли они по какой лицензии распространяются картинки
Если владелец картинки пожалуется на тебя, то тебе пиздец. Минимум попросят удалить картинку из приложения, максимум забанят аккаунт. Если владелец кабанчик, может и в суд подать, но это из разряда раз на миллион.
Джава-бэк например
>Сервер на пхп делают? Или сразу лучше nodejs?
firebase потести. А так ноду если знаешь, не критично от слова вообще.
>Спасибо обнадежил. Значит буду изучать флаттер.
А так ты незнаешь его, попробуй лучше java core и котлин потом.
>>А так ты не знаешь его
Вообще ноль.
>> А так ноду если знаешь
Значит пилить на ноде. Я понял.
>>попробуй лучше java core и котлин потом.
А ты тот анон что мне ранее ответил?
Просто моя задача с горизонтом месяца в три запилить на иос и андроиде оч простое приложение. Фактически просто вывести json от сервера. Небольшое такое дополнение к основному вэб-приложению.
И мне нужно что то типа "http-режима", постоянный сокет я хз как мобильный клиент обменивается данными с сервером, онлайн игры очевидно на сокетах висят мне по идее не нужен.
В общем мне нужно что то попроще и побыстрее условно конечно
В джаву/котлин я боюсь въезжать буду долго.
>А ты тот анон что мне ранее ответил?
Про флаттер я писал, думал ты его знаешь. Нет смысла ебать мозги с флаттером если твоя цель приложение, джава кор и котлин легче зайдут + туториалов море.
>В джаву/котлин я боюсь въезжать буду долго.
Думаю если с утчетом изучения языка, тогда в 3 месяца уложишься легче, если хуй не забивать и учить плотно в плане информации. Да и вообще если приложения простое, то много ума и кода, там не нужно, тем более можешь спиздить уже готовый код и переиначить под себя, поищи в телег слитые курсы по изготовлению приложений.
Я думал о джаве, тем более что современный пхп это считай ее форк в плане ооп.
Но мне еще потенциально айфон-приложение нужно. То есть кроссплатформа.
Хотя теоретически изучать джаву/котлин надежнее наверно.
Короче я пока в сомнениях.
А кстати, читал что для грядущей фуксии флаттер - пока что единственная возможность пилить приложения. А вдруг для фуксии отвалится поддержка котлина и джавы? Это я как совсем профан говою конечно
>Но мне еще потенциально айфон-приложение нужно. То есть кроссплатформа.
Xamarin - но костыль еще тот.
>А кстати, читал что для грядущей фуксии флаттер - пока что единственная возможность пилить приложения. А вдруг для фуксии отвалится поддержка котлина и джавы? Это я как совсем профан говою конечно
В первый раз слышу, но думаю что пиздеж, котлин точно не умрёт для андроида.
В любом случае ждать пока выйдет фуксия нет смысла. Твоё дело конечно, но я бы изучал java core + kotlin, да и в любом случае думаю что переходит будет плавный и перейти во флаттер не составит труда.
Лучше формошлёпствовать под андроид, чем формошлепствовать на заводе где платят 20к.
Ну с учетом моего текущего контекста проблемы, это не так актуально.
Мне нужно простенькое приложение на ios и android сделать, и видимо буду вкатываться во дарт + флаттер.
В принципе конечно больше импонирует вкат в более глубокие и нативные технологии, но моя задача требует компромиссов.
Поэтому попробую оценить по сложность реализацию через изучения дарт + флаттер, и уже от этого буду плясать.
> не бизнес логики
> Взял данные с апи и отобразил
Чем не бизнес-логика? Если нужно взять данные с нескольких апишек и как-то их скомпоновать, то задача не самая тривиальная.
2д. Уже не пилю. Новых идей нет, да и запал пропал, словил депресняк. Сделал тупо и проще, почему-то выстрелело, сейчас в стагнации. Доходы падают каждый месяц.
Проект - простенький интернет магаз, в силу того как выглядит макет ui сейчас пишу эрзац-сингл активити (одна активити для всего связанного с авторизацией, вторая - основная часть приложухи)
Основная часть апки на всех экранах имеет боттом нав бар, для того чтоб не проебывать все что юзер нащелкал, при переходам по навбару - фрагменты я тупо скрываю/отображаю, т.е по сути у меня висит 6 фрагментов на одном id активити, из которых 1 отображается юзеру - а остальные тупо скрыты.
Если говорить чуть более конкретно - то это не просто фрагменты, а фрагменты держащие бэкстек других фрагментов (т.к каждая вкладка навбара это целая цепочка разных экранов + мелкие дополнительные примочки, сделал через абстрактный класс от которого все эти топ-лвл фрагменты наследуются).
Вопрос в том насколько такая концепция жизнеспособна? Не посыпеться ли все от высокого жора памяти? Мельком посмотрел другие приложухи с навбаром - похоже многие делают что-то похожее.
Пока работает все ок, кроме пары мелких моментов (например после восстановления активити, восстановленные фрагменты не восстанавливают значение своей видимости (насколько я понял потому что в стейте такого поля тупо нет, буду сохранять ручками)
>Вопрос в том насколько такая концепция жизнеспособна? Не посыпеться ли все от высокого жора памяти? Мельком посмотрел другие приложухи с навбаром - похоже многие делают что-то похожее.
Прогоняй тесты сразу же, смотри сколько памяти жрёт, все зависит от толстоты приложухи, судя по тому что ты описал ебануть не должно.
>Прогоняй тесты сразу же, смотри сколько памяти жрёт, все зависит от толстоты приложухи, судя по тому что ты описал ебануть не должно.
Спасибо, идея неплохая, с профайлером посижу - посмотрю.
У меня вообщем сходные мысли, приложуха простая, ничего сверхтяжелого нет - да и на практике OutOfMemory я видел только у коллеги на проекте, где в рантайме на превью с камеры мутная либа с гитхаба накладывала OpenGl фильтры (и то, крашило только на некродевайсах)
Не воспринимай это как бред или тупой совет, реально помог.
Записываешься в бассейн, ежедневно. Потом спорт зал, тоже ежедневно, исключаешь весь сёрфинг в интернете, спать ложишься в 9 вечера, просыпаешься в 5.
Исключаешь алкоголь и фастфуд, он офицально вызывает депру по исследованиям.
На ютюбе смотришь только видосики про отдых и угар, никаких новостей и прочей хуйни, максимально абстрагируйся от этого, за 20+ депра пройдет, но один хуй все персонально, мне помогло.
Также совет, дома не сидеть от слова совсем, просто шляйся по улице, ходи в парк, мб с кем познакомишься.
Ну смотри, ситуация такая: Если проект новый, то 99.9% это котлин. Если старый - вероятно солидная его часть написана на жабе, новое могут как и дописывать на жабе так и писать на котлине, проблем на их стыке не слишком много и они не критичны.
На собесах скорее будут спрашивать по котлину, чем по джаве - но опять же, тут скорее зависит от проекта.
Ну и главное, котлин JVM язык и с джавой очень и очень похож.
Я как человек который вначале подробно учил джаву - а потом вообще без какой либо подготовки стал писать на котлине по большей части воспринимаю его как жирный синтаксический сахар для джавы, правда корутины немного поломали этот концепт (до сих пор нормально в них не разобрался, лол)
По итогу - если цель прямо быстрейший вкат, то учи котлин.
Но перед этим все таки разберись даже не в самой джаве, а в самой JVM. Хотя бы мельком, что это такое, как работает, что такое JDK, JRE, что такое .class файлы, что такое .java, memory model (heap/stack, GC, shallow copy/deep copy).
Благодарю за подробный ответ анон
>Но перед этим все таки разберись даже не в самой джаве, а в самой JVM. Хотя бы мельком, что это такое, как работает, что такое JDK, JRE, что такое .class файлы, что такое .java, memory model (heap/stack, GC, shallow copy/deep copy).
ну для написания приложух в андроиде это не очень надо. Можно смело пропустить и выучить по необходимости (которой 99% не будет)
С JDK/JRE мб перегибаю, хотя у меня на джуновских собесах и за classpath / classloaders просили пояснить.
А насчет остального - использование .class в коде может попасться, memory model тоже нужно понимать - хотя бы то что все объекты передаются по значению, и для примитивов это будет просто значение, а для ссылочных типов данных это будет ссылка и что если даже ее скопируем - у нас будут 2 ссылки на один и тот же объект (видал вкатывальщиков которые этого не понимали).
Heap/stack - тоже имхо нужно понимать, чтоб не сильно удивиться от вида StackOverFlow/OutOfMemory + для многопотока нужно знать что у каждого потока свой стек + что делает volatile и т.д...
GC - ну это на минималках тоже нужно понимать, иначе как понять что такое мемори лик и как с ним бороться
На джуновских собесах по ЯП гоняют? Или чисто по андроиду? Я пока только начал разбираться, код еще толком не писал. Когда джаву изучал делал свой проект, игру получилось хуево, но технологий кучу освоил и разобрался с фундаментальными вещами детально.
А под андроид смотрел некоторые видео по созданию приложений, мне показалось кода там мало или я ошибаюсь?
>Heap/stack - тоже имхо нужно понимать, чтоб не сильно удивиться от вида StackOverFlow/OutOfMemory + для многопотока нужно знать что у каждого потока свой стек
>GC - ну это на минималках тоже нужно понимать
мы точно в треде про андроид сидим?
>мы точно в треде про андроид сидим?
Ну джава все таки преобладает в большинстве проектов под андроид пока что. А heap/stack это начала теории в джаве.
другой-анон
И по языку и по андроиду. Джунов гоняют по технике как правило от и до (опыта у тебя нет, говорить о нем не получится, вот и гоняют по технике), это уже дальше, чем ближе к сеньоро-архитекторам тем меньше разговоров о голой технике и больше разговоров за жизнь на прошлых проектах и архитектурах.
>опыта у тебя нет
А если делал свои проекты, они есть на гите и если некоторые залить в плей маркет, это считается полноценным опытом?
Конечно, нахрена jvm разрабу знать за gc - переменные на жабараше показали как создать - этого достаточно, вперед педалить.
Ну для меня маркер примерно такой - если у твоего проекта есть реальные юзеры (хотя бы ты сам) то это круто, если же нет - то код и проект посмотреть можно, но это не сильно серьезно. Хотя конечно все равно это идет в +.
Скорее если сильно захотят посмотреть как именно ты код пишешь тебе тестовое задание дадут.
В целом да, в жаба-треде насколько помню над ним вечно стебутся. Можешь вначале немного офк посидеть, но надолго там зависать точно не стоит.
>Скорее если сильно захотят посмотреть как именно ты код пишешь тебе тестовое задание дадут.
Тестовое же домой дают? Бывает такое что сразу на собесе нужно писать? Или это для мидло-синёров?
>>822698
Ну я как то пытался, когда читал книгу по джаве, мне показалось что задания слишком ебанутые. Поэтому придумывал сам себе задания.
Тестовое естественно дома, как правило это небольшое приложение, типичное задание это получить данные с апи, сохранить, засунуть их в какой-то ресайкл и что-то сверху по мелочи накрутить.
Код на собесе тоже могут попросить пописать, (редко, но бывает), но естественно тебя никто не будет просить писать приложение на бумажке, это будет просто задача - начиная от fizz buzz test заканчивая задачами с leetcode/hackerank или чем-то собственного сочинения.
>Тестовое же домой дают? Бывает такое что сразу на собесе нужно писать? Или это для мидло-синёров?
И еще в дополнение, если у тебя реально в резюме будет проект на гитхабе - то вполне вероятно что даже где хотели тебе дать тестовое - его не дадут, а откроют твой проект и быстро посмотрят его. Если ссылок на гитхаб нет - то вероятность нарваться на тестовое растет.
Спс, добавлю себе в сохранёнки, прочту снова когда буду на собесы ходить. Кстати есть примеры сроки вката в андроид, вроде же уровень пониже чем на джаву бэк?
В джаву судя по опыту до джунового опыта год вката, если по 3 часа в день на протяжении года учить/кодить.
>Кстати есть примеры сроки вката в андроид, вроде же уровень пониже чем на джаву бэк?
Хз, я шел по пути просиживания жеппы в профильном вузе, соответственно мой опыт и опыт ближайших знакомых это не вкат с 0 за 3 месяца занятия по вечерам, а годы неспешной учебы.
Если взять мой поток - то несколько чуваков уже работало когда только поступали, дальше самые шарящие и работящие уже начали работать к концу второго курса, основная масса рассосалась по галерам примерно в середине 3-го, мой срок вката оказался одним из худших - первая работа спустя 2 недели после получения диплома.
>первая работа спустя 2 недели после получения диплома.
Не так уж и плохо, наработаться успеешь за жизнь, а чилить в универе получится только единожды если ты обычный человек.
Я вот когда вузик окончил мне предложили зарплату в 15к, с тех пор ни дня по спецальности не работал, хотя защита диплома 5/5 , у единственного из группы сука.
Я использовал только Xamarin и это очень ебанутая хуйня вплане стабильности. Самый простой нет совет это задрочить айосовских язык.
пишу на котлин под андроид
знание GC и прочего упомянутого было нужно аж 0 раз.
если бы этого не знал - результат был бы тот же.
нет. Я шарпист. А жава...ну разве что в процессе гугления на so ответы на жаве и так с жавой знаком.
Как минимум на собесах через раз спрашивают
На шарпе пробовал что нибудь делать под андроид?
Только сеньоры. Рили вообще джуну ремоут найти?
MyPhoneExplorer
мобила побывала у мусоров, хочу узнать что с ним там происходило сняв логи, нагуглил logcat и способ через Android Studio, но насколько я понял эти способы показывают логи в текущий момент. ведутся ли вообще логи системы? если да, то как их достать?
Там копеечный кеш. Буквально мегабайты. В настойках устройства можно настроить
Можно ли в ретрофите при ошибке десериализовалки получить ответ в виде строки?
А то получается, тебе либо прилетает валидный жсон и десериализуется, либо request.execute выбрасывает ошибку гдето у себя внутри конвертера, и ты не получаешь вообще никакого ответа :\
Можешь как вариант ResponseBody юзать, а далее поймешь
Это копия, сохраненная 24 марта 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.