tgoop.com »
United States »
Библиотека мобильного разработчика | Android, iOS, Swift, Retrofit, Moshi, Chuck » Telegram Web
Неоптимизированные анимации вызывают лаги, повышают энергопотребление и портят UX. Разберем как делать их плавными на Android и iOS.
— 60 FPS или выше - целевой показатель плавности
— Избегайте перерисовки - анимируйте только нужные свойства
— Используйте аппаратное ускорение
🛠️ Инструменты и подходы
Для Android:
// Используйте Property Animation
ViewPropertyAnimator
.animate(view)
.translationX(100f)
.setDuration(300)
.setInterpolator(AccelerateDecelerateInterpolator())
.start()
Для iOS (Swift):
UIView.animate(withDuration: 0.3,
delay: 0,
options: [.curveEaseInOut],
animations: {
view.frame.origin.x += 100
})
— Анимация размеров (width/height) - вызывает перерасчет layout
— Слишком сложные кривые Безье - нагрузка на CPU
— Множество одновременных анимаций - конкуренция за ресурсы
— Используйте transform вместо изменения размеров: только нужные свойства
— Используйте аппаратное
— Для сложных анимаций используйте Lottie:
implementation 'com.airbnb.android:lottie:6.1.0'
— Тестируйте производительность в режиме разработчика:
— Переходы между экранами
— Визуальная обратная связь
— Акцентирование важных элементов
Какие советы вы дадите? Делитесь в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🥱2😁1
В статье автор научит рисовать текст по траектории (path) внутри холста Compose.
Это можно использовать для создания причудливой графики или анимации строки текста.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👏5❤3🔥1
adb shell input
– управление устройством через терминалХотите автоматизировать тесты или быстро проверить работу приложения без ручного ввода? С помощью
adb shell input
вы можете:— Имитировать нажатия (тапы, свайпы)
— Вводить текст без клавиатуры
— Отправлять системные события (кнопки Home, Back, Power)
Примеры команд:
# Тап по координатам (X Y)
adb shell input tap 500 1200
# Свайп (X1 Y1 X2 Y2 длительность)
adb shell input swipe 300 1600 300 400 500
# Ввод текста
adb shell input text "Hello_World!"
# Нажатие кнопки (KEYCODE_HOME)
adb shell input keyevent 3
Где пригодится:
1. Автотесты – создание сценариев для UI-тестирования
2. Демонстрации – запись повторяемых действий
3. Отладка – проверка обработки сложных жестов
Полезные KEYCODE:
3 – Home
4 – Back
24 – Volume Up
66 – Enter
82 – Menu
Pro-совет:
Используйте
adb shell getevent -l
для определения точных координат элементов на экране.Как вы используете эту команду? Делитесь кейсами
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👾4❤1🥱1
🔥 Последняя неделя перед стартом курса по AI-агентам
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Старт курса уже 5го числа! Если вы планировали вписаться — сейчас ПОСЛЕДНИЙ шанс забронировать место
На курсе:
— разложим LLM по косточкам: токенизация, SFT, PEFT, инференс
— соберём RAG и научимся оценивать его адекватно
— построим настоящую мультиагентную систему — архитектуру, которая умеет расти
— разберём CoPilot, сломаем через prompt injection (спасибо Максу)
— и наконец, посмотрим, как это работает в MCP и реальных кейсах
📍 Это 5 живых вебинаров + раздатка + домашки + чат с преподавателями
И главное — возможность реально разобраться, как проектировать системы на LLM, а не просто «поиграться с API»
👉 Курс здесь
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9❤7
Перед тем как браться за новый проект или крупное обновление — сохраните этот чек-лист. Он поможет не упустить важное.
Какие важные пункты мы забыли? Пишите в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5
Формы являются фундаментальным элементом любого современного приложения.
Независимо от того, создаете ли вы корпоративный портал, социальную сеть или электронную коммерцию — работа с пользовательскими данными через формы неизбежна.
В статье автор подробно рассмотрит различные подходы к работе с формами во Flutter, начиная с базовых инструментов и заканчивая современными решениями.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1🥱1
Собрали лучшее о мобильной разработке. Включаем и смотрим по пути на работу.
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁12
Лето — лучшее время для сплава. Поэтому, если вы пока не в отпуске, давайте устроим короткий сплав по асинхронным потокам данных.
Kotlin Flow — это API для работы с асинхронными потоками данных, построенное поверх корутин.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🔥 Сегодня стартует курс по AI-агентам!
Онбординг уже сегодня, но ещё можно вписаться — ПОСЛЕДНИЙ ШАНС это сделать.
Мы больше года собирали мультиагентные системы: экспериментировали, переделывали и в итоге — оформили всё в 5 плотных вебинаров.
😤 «А можно ли вообще научиться чему-то за 5 вебинаров?!»
Если вы хотите просто послушать — нет
Если хотите разбираться и делать — да
➡️ На курсе:
— мы не читаем слайдики, а работаем в коде в реальном времени
— можно задавать вопросы прямо на вебинаре
— после каждого вебинара есть домашка и поддержка в чате
И главное — вы получаете системное понимание, а не набор хаотичных туториалов.
⚡️Если вы думаете, что успеете потом — не успеете.
Старт сегодня:
— а те, кто вписался сейчас, будут вас опережать — в проектах, на грейде и в зарплате
Знакомьтесь, эксперт нашего курса:
Никита Зелинский — Chief Data Scientist МТС, Head of ML Platforms, руководитель центра компетенций по Data Science.
❗Стартуем сегодня — забронируй свое место
Онбординг уже сегодня, но ещё можно вписаться — ПОСЛЕДНИЙ ШАНС это сделать.
Мы больше года собирали мультиагентные системы: экспериментировали, переделывали и в итоге — оформили всё в 5 плотных вебинаров.
😤 «А можно ли вообще научиться чему-то за 5 вебинаров?!»
Если вы хотите просто послушать — нет
Если хотите разбираться и делать — да
➡️ На курсе:
— мы не читаем слайдики, а работаем в коде в реальном времени
— можно задавать вопросы прямо на вебинаре
— после каждого вебинара есть домашка и поддержка в чате
И главное — вы получаете системное понимание, а не набор хаотичных туториалов.
⚡️Если вы думаете, что успеете потом — не успеете.
Старт сегодня:
— а те, кто вписался сейчас, будут вас опережать — в проектах, на грейде и в зарплате
Знакомьтесь, эксперт нашего курса:
Никита Зелинский — Chief Data Scientist МТС, Head of ML Platforms, руководитель центра компетенций по Data Science.
❗Стартуем сегодня — забронируй свое место
Приготовили для вас дайджест по актуальному из мира iOS, Android и кроссплатформы.
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1👍1
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Что выведет код?
Anonymous Quiz
32%
Это Int, Это Double
27%
Это Int, Это не Double
30%
Это не Int, Это не Double
11%
Ошибка компиляции
❤2👏1
Выбор между IDE и текстовым редактором - один из важных вопросов, на который должен ответить каждый разработчик.
IDE, как правило, включает в себя инструменты отладки, системы контроля версий и инструменты управления проектами, установленные в единой среде, помимо инструментов редактирования текста.
В то время как текстовый редактор сравнительно меньше по размеру и имеет специальные инструменты только для текста.
Что же лучше для программирования: текстовый редактор или IDE? Голосуйте и пишите своё мнение в комментариях
❤️ — текстовый редактор
👍 — IDE
#междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤4😁2
iOS Developer — от 200 000 до 350 000 ₽, удалёнка
Junior Android Developer — удалёнка
Android-разработчик — от 200 000 ₽, удалёнка
IOS разработчик (Middle) — удалёнка
Android Developer (Middle+/Senior, Kotlin Multiplatform) — до 350 000 ₽, удалёнка
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2👍1
Анонимный класс — это класс, которые явно не объявлен с помощью
class
, наследуется от заданного класса или реализует заданный интерфейс. Анонимный класс не всегда является синглтоном. Анонимный класс создается каждый раз при вызове соответствующего конструктора и используется только в контексте, где был создан.
При этом каждый экземпляр анонимного класса имеет свое уникальное состояние и может отличаться от других экземпляров того же анонимного класса. В Kotlin анонимный класс создается следующим образом:
val obj = object : SuperClassOrInterface() {
// implementation here
}
Объекты анонимных классов полезны для одноразового использования.Экземпляры анонимных классов называют анонимными объектами, потому что они объявляются выражением, а не именем.
Анонимный объект начинается с ключевого слова
object
.• можно задавать свойства, функции, блоки инициализации;
• можно наследоваться от других классов и реализовывать интерфейсы;
• нельзя создавать конструкторы (как основные, так и вторичные).
Ключевое слово
object
позволяет одновременно объявить класс и создать его экземпляр (т.е. объект). При этом применять его можно по-разному:•
object Name
— это объявление объекта(оbject declaration), реализация паттерна Singleton;•
companion object
— это объект-компаньон внутри класса (также Singleton);•
object
— это объект-выражение (анонимный объект/object expression), не Singleton.#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1🌚1
Да кто такой этот ваш 2D-скролл? Зачем он нужен, если не делать аналог excel? На самом деле, двумерный скролл нужен в огромном количестве сценариев использования мобильных приложений.
В этой статье автор рассмотрит, как на Flutter можно реализовать двумерный скролл с помощью решений из коробки, почему они могут не подойти и что тогда делать.
Подробно разберёт, как сделать собственную производительную реализацию 2D-скролла, и оценит влияние на производительность на примере видеоредактора Yappy — приложения вертикальных видео.
👉 Читать статью
#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
🔌 Реализация оффлайн-режима
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
⚙️ Техники реализации
1. Локальное кэширование данных
• Android (Room):
• iOS (Core Data):
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
🚫 Чего избегать
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
💡 Продвинутые техники
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях💬
🐸 Библиотека мобильного разработчика
#буст
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
1. Локальное кэширование данных
• Android (Room):
@Entity
data class CachedData(@PrimaryKey val id: String, val content: String)
@Dao
interface CacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(data: CachedData)
}
• iOS (Core Data):
let context = persistentContainer.viewContext
let entity = NSEntityDescription.insertNewObject(forEntityName: "CachedData", into: context)
entity.setValue(content, forKey: "content")
try? context.save()
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
class OfflineQueue {
private val queue = ConcurrentLinkedQueue<() -> Unit>()
fun addToQueue(action: () -> Unit) {
queue.add(action)
}
fun processQueue() {
while (queue.isNotEmpty()) {
queue.poll()?.invoke()
}
}
}
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6
🔌 Реализация оффлайн-режима
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
⚙️ Техники реализации
1. Локальное кэширование данных
Android (Room):
iOS (Core Data):
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
🚫 Чего избегать
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
💡 Продвинутые техники
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях💬
🐸 Библиотека мобильного разработчика
#буст
Пользователи часто остаются без интернета, но хотят продолжать работать с приложением. Разберём, как грамотно реализовать оффлайн-режим.
1. Локальное кэширование данных
Android (Room):
@Entity
data class CachedData(@PrimaryKey val id: String, val content: String)
@Dao
interface CacheDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(data: CachedData)
}
iOS (Core Data):
let context = persistentContainer.viewContext
let entity = NSEntityDescription.insertNewObject(forEntityName: "CachedData", into: context)
entity.setValue(content, forKey: "content")
try? context.save()
2. Очередь запросов
Сохраняйте действия пользователя при отсутствии сети:
class OfflineQueue {
private val queue = ConcurrentLinkedQueue<() -> Unit>()
fun addToQueue(action: () -> Unit) {
queue.add(action)
}
fun processQueue() {
while (queue.isNotEmpty()) {
queue.poll()?.invoke()
}
}
}
3. Умная синхронизация
Используйте WorkManager (Android) или Background Tasks (iOS) для фоновой синхронизации.
1. Хранения конфиденциальных данных без шифрования
2. Бесконечного накопления несинхронизированных данных
3. Игнорирования конфликтов данных при синхронизации
1. Дельта-синхронизация – передавайте только изменения
2. Конфликт-менеджмент – стратегии разрешения противоречий
3. Прогрессивная загрузка – сначала кэш, потом обновления
Как вы реализуете оффлайн-режим? Делитесь решениями в комментариях
#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤🔥2