Самые свежие новости, новинки и тренды Android от практикующего разработчика.
Автор: @al_gorshkov,
Чат: @android_live_chat
Личный блог: @al_gorshkov_blog
Рекламу не размещаю
Post #560
3.37K
AN @android_live
Showing posts older than #562 · Back to latest
Instets. MotionLayout и Instets при помощи WindowInsetsAnimation.Callback.
Fragment есть 4 способа совершить транзакцию: commit(), commitAllowingStateLoss(), commitNow(), commitNowAllowingStateLoss(). commit() vs commitAllowingStateLoss(). Иногда при использовании Fragment или DialogFragment можно столкнуться с ошибкой can’t perform a commit after onSaveInstanceState(). Детальная статья об этой ошибке тут, а главный недостаток этого бага в том, что его не так просто отловить при разработке и он легко может проявиться в проде.commit() и commitAllowingStateLoss() почти одинаковы в своей работе за исключением одного: при вызове commit FragmentManager проверяет, сохранил ли он своё состояние или нет. Если сохранил, то появляется эта ошибка. commitAllowingStateLoss() вы не получите ошибку, однако FragmentManager может потерять своё состояние, и, соответственно, других фрагментов, добавленных после метода onSaveInstanceState().commit() vs commitNow(). Другая альтернатива использования commit влияет на время выполнения транзакции. commit() транзакция не совершается мгновенно: она планируется в главном потоке и выполняется только тогда, когда этот поток готов к выполнению. На практике это даёт возможность выполнять любое число транзакций, но следует помнить, что они не выполнятся сразу. commitNow() транзакция выполняется в тот же момент: если вызвать несколько транзакций, то все другие будут ожидать, пока первая не завершит своё выполнение. Стоит знать, что документация предостерегает не использовать этот метод, если вам нужно добавлять фрагмент в back stack.commitNow(). Если же транзакций несколько и важно добавлять их в back stack, то commit(). При возникновении ошибки стоит постараться выяснить причину её появления, и если победить её не удаётся, то лучше использовать методы с префиксом AllowingStateLoss.
:networking, :persistence или :models. Но со временем подобные модули превращаются в несколько монолитов, и разработчики возвращаются к той же самой проблеме... 🙄
Activity со всеми Composable-функциями, где есть аннотация Preview. Также есть функции для цветов и шрифтов.
View, как использовать Profiler для оптимизации отрисовки и многое другое. View, но хочет сильнее погрузиться в эту интересую тему.
LIKE. Но есть проблема — это скорость при выполнении запроса. По сути, этот оператор проходит по всей таблице и находит те данные, что соответствуют запросу. LIKE, то стоит присмотреться к этому решению.@Fts4 с указанием родительской таблицы:@Fts4(contentEntity = Route::class)
@Entity(tableName = "routesFts")
class RoutesFts(val id: String, val title: String)
LIKE: @Dao
abstract class RouteFtsDao {
@Query("SELECT * FROM route JOIN routesFts ON route.id == routesFts.id WHERE routesFts.title MATCH :text GROUP BY route.id" )
abstract fun routesWithText(text: String): List<Route>
}
RecyclerView: это кажется довольно простой задачей, однако если мы хотим сделать открытие этого меню из середины экрана при заполненном списке, то получаются проблемы, связанные с перехватом событий touch.MotionLayout, а недавно появилась статья про работу с ConstraintLayout из кода.
NullPointerException ;NullPointerException.NullPointerException.