# Android Blog - Mobile Dev Notes

Android development tutorials covering architecture, design patterns and and best practices in Android.

This is one page of public article previews, not the complete archive. Follow Next page to continue. Summaries are not the original full articles.

## StateFlow and SharedFlow in ViewModels

DevFeed: [StateFlow and SharedFlow in ViewModels](<https://devfeed.tech/articles/stateflow-and-sharedflow-in-viewmodels-22664.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/stateflow-sharedflow-flow-viewmodel-lifecycle>)

Author: James Shvarts

Published: 2022-12-28T19:21:19Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [Code](<https://devfeed.tech/topics/code.md>), [Unit testing](<https://devfeed.tech/topics/unit-testing.md>), [Compose](<https://devfeed.tech/topics/compose.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [compose](<https://devfeed.tech/tags/compose.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [sharedflow](<https://devfeed.tech/tags/sharedflow.md>), [stateflow](<https://devfeed.tech/tags/stateflow.md>), [unit-testing](<https://devfeed.tech/tags/unit-testing.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

A practical guide to choosing between StateFlow and SharedFlow in Android ViewModels. It covers lifecycle-aware collection, exposing flows as UI state in view-based apps and Compose, and unit testing ViewModels that convert flows into state or shared events.

### Source excerpt

Collecting State and Shared Flows from ViewModels while respecting lifecycle of the collector views

## Testing functions with lambdas using MockK

DevFeed: [Testing functions with lambdas using MockK](<https://devfeed.tech/articles/testing-functions-with-lambdas-using-mockk-22666.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/testing-listener-lambda-mockk>)

Author: James Shvarts

Published: 2022-12-18T15:58:29Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Testing](<https://devfeed.tech/topics/testing.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Mocking](<https://devfeed.tech/topics/mocking.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [callback](<https://devfeed.tech/tags/callback.md>), [function](<https://devfeed.tech/tags/function.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [mocking](<https://devfeed.tech/tags/mocking.md>), [testing](<https://devfeed.tech/tags/testing.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-test](<https://devfeed.tech/tags/unit-test.md>)

### AI overview

A Kotlin testing tutorial showing how to use MockK to test functions that accept success and failure lambda callbacks. It demonstrates mocking the engine, capturing or invoking callback arguments, and verifying the resulting instrument-panel behavior.

### Source excerpt

Testing Kotlin lambda invocations with MockK

## Compose by example: BoxWithConstraints

DevFeed: [Compose by example: BoxWithConstraints](<https://devfeed.tech/articles/compose-by-example-boxwithconstraints-22650.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-boxwithconstraints-boxwithconstraintsscope>)

Author: james shvarts

Published: 2022-11-18T12:30:48Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [adaptive](<https://devfeed.tech/tags/adaptive.md>), [compose](<https://devfeed.tech/tags/compose.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [screen](<https://devfeed.tech/tags/screen.md>)

### AI overview

A practical tutorial on using BoxWithConstraints in Jetpack Compose to build responsive layouts. It demonstrates adapting a horizontal carousel to portrait and landscape modes by calculating card sizes from available constraints, and explains how BoxWithConstraints affects Compose phases.

### Source excerpt

A practical example of using BoxWithConstraints in Jetpack Compose to build responsive layouts

## Slim down your Android components with LifecycleObserver

DevFeed: [Slim down your Android components with LifecycleObserver](<https://devfeed.tech/articles/slim-down-your-android-components-with-lifecycleobserver-22657.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/default-lifecycle-observer>)

Author: james shvarts

Published: 2022-11-17T21:11:40Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Android](<https://devfeed.tech/topics/android.md>), [Jetpack](<https://devfeed.tech/topics/jetpack.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Development](<https://devfeed.tech/topics/development.md>), [Library](<https://devfeed.tech/topics/library.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [dagger](<https://devfeed.tech/tags/dagger.md>), [dagger-hilt](<https://devfeed.tech/tags/dagger-hilt.md>), [development](<https://devfeed.tech/tags/development.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [library](<https://devfeed.tech/tags/library.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [logs](<https://devfeed.tech/tags/logs.md>)

### AI overview

A tutorial on using Android LifecycleObserver to move lifecycle-related logic out of large Activities, Fragments, and Application classes. It covers reusable observers, observing Activity and Fragment view lifecycles, observing the application process, and injecting lifecycle-aware components with Dagger/Hilt.

### Source excerpt

Learn to create custom LifecycleObserver components and inject them with Dagger/Hilt

## Show BottomBar conditionally in Compose

DevFeed: [Show BottomBar conditionally in Compose](<https://devfeed.tech/articles/show-bottombar-conditionally-in-compose-22663.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/should-show-bottombar-conditionally-in-jetpack-compose>)

Author: James Shvarts

Published: 2022-11-08T21:38:12Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [App](<https://devfeed.tech/topics/app.md>)

Tags: [bottom-navigation](<https://devfeed.tech/tags/bottom-navigation.md>), [class](<https://devfeed.tech/tags/class.md>), [compose](<https://devfeed.tech/tags/compose.md>), [icons](<https://devfeed.tech/tags/icons.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [navigation](<https://devfeed.tech/tags/navigation.md>), [route](<https://devfeed.tech/tags/route.md>), [screen](<https://devfeed.tech/tags/screen.md>)

### AI overview

A tutorial on conditionally showing or hiding a bottom navigation bar in Jetpack Compose based on the current navigation route. It uses a custom AppState class, separate navigation graphs for tabs, and a detail-screen navigation example.

### Source excerpt

Conditionally show BottomBar with bottom navigation in Jetpack Compose

## Compose by example: Intrinsics

DevFeed: [Compose by example: Intrinsics](<https://devfeed.tech/articles/compose-by-example-intrinsics-22658.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/intrinsics-intrinsicsize-height-max>)

Author: James Shvarts

Published: 2022-11-05T22:25:24Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>)

Tags: [compose](<https://devfeed.tech/tags/compose.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [measurements](<https://devfeed.tech/tags/measurements.md>)

### AI overview

A Jetpack Compose example showing how intrinsic measurements and IntrinsicSize can make a middle column match the height of the tallest column in a row.

### Source excerpt

Example of using IntrinsicSize in Jetpack Compose

## Basic Auth with OkHttp and Retrofit

DevFeed: [Basic Auth with OkHttp and Retrofit](<https://devfeed.tech/articles/basic-auth-with-okhttp-and-retrofit-22649.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/basic-auth-okhttp-retrofit-dagger>)

Author: James Shvarts

Published: 2022-11-05T22:25:12Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [HTTP](<https://devfeed.tech/topics/http.md>), [API](<https://devfeed.tech/topics/api.md>), [Dagger](<https://devfeed.tech/topics/dagger.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [auth](<https://devfeed.tech/tags/auth.md>), [authentication](<https://devfeed.tech/tags/authentication.md>), [dagger-hilt](<https://devfeed.tech/tags/dagger-hilt.md>), [dependencies](<https://devfeed.tech/tags/dependencies.md>), [http](<https://devfeed.tech/tags/http.md>), [json](<https://devfeed.tech/tags/json.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [libraries](<https://devfeed.tech/tags/libraries.md>), [payload](<https://devfeed.tech/tags/payload.md>), [request](<https://devfeed.tech/tags/request.md>), [retrofit](<https://devfeed.tech/tags/retrofit.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

A tutorial showing how to perform authenticated HTTP GET requests in a Kotlin Android project using Basic Authentication with OkHttp, Retrofit, Dagger/Hilt, and Moshi.

### Source excerpt

Basic Auth example using OkHttp, Retrofit, Dagger in a Kotlin project

## Animation in Jetpack Compose

DevFeed: [Animation in Jetpack Compose](<https://devfeed.tech/articles/animation-in-jetpack-compose-22648.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/animation-compose-api-summary>)

Author: James Shvarts

Published: 2022-07-01T04:00:00Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [API](<https://devfeed.tech/topics/api.md>), [Android](<https://devfeed.tech/topics/android.md>), [Android Studio](<https://devfeed.tech/topics/android-studio.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-studio](<https://devfeed.tech/tags/android-studio.md>), [animation](<https://devfeed.tech/tags/animation.md>), [api](<https://devfeed.tech/tags/api.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [compose-animation](<https://devfeed.tech/tags/compose-animation.md>), [debug](<https://devfeed.tech/tags/debug.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [state](<https://devfeed.tech/tags/state.md>), [suspend](<https://devfeed.tech/tags/suspend.md>), [tooling](<https://devfeed.tech/tags/tooling.md>)

### AI overview

A foundational overview of Jetpack Compose Animation APIs, organized around animation scenarios and API selection. It covers declarative and state-based APIs, customization, coroutine-based lower-level APIs, and Android Studio tooling for implementation and debugging.

### Source excerpt

Foundational overview of Compose Animation APIs to help you choose most suitable API for your animation task.

## Compose sample app: UI state with Flow, offline first

DevFeed: [Compose sample app: UI state with Flow, offline first](<https://devfeed.tech/articles/compose-sample-app-ui-state-with-flow-offline-first-22656.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-ui-state-flow-offline-first-repository>)

Author: James Shvarts

Published: 2022-06-25T04:20:32Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [reactive](<https://devfeed.tech/topics/reactive.md>), [Android](<https://devfeed.tech/topics/android.md>), [Persistence](<https://devfeed.tech/topics/persistence.md>), [Database](<https://devfeed.tech/topics/database.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [architecture](<https://devfeed.tech/tags/architecture.md>), [compose](<https://devfeed.tech/tags/compose.md>), [database](<https://devfeed.tech/tags/database.md>), [flow](<https://devfeed.tech/tags/flow.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [offline](<https://devfeed.tech/tags/offline.md>), [persistence](<https://devfeed.tech/tags/persistence.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial presents an Android sample app built with Jetpack Compose and Kotlin Flow. It explains UI state modeling, an offline-first reactive repository backed by a Room database, unit testing with Turbine, and composition optimization lessons.

### Source excerpt

Sample repo implementing state using Flow, Offline First repository, unit tests using Turbine.

## Test Coroutine Scheduler

DevFeed: [Test Coroutine Scheduler](<https://devfeed.tech/articles/test-coroutine-scheduler-22665.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/test-coroutine-scheduler-dispatcher-main-rule>)

Author: James Shvarts

Published: 2022-06-24T00:55:12Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Coroutines](<https://devfeed.tech/topics/coroutines.md>), [Exception](<https://devfeed.tech/topics/exception.md>), [Library](<https://devfeed.tech/topics/library.md>)

Tags: [coroutine](<https://devfeed.tech/tags/coroutine.md>), [deprecated](<https://devfeed.tech/tags/deprecated.md>), [library](<https://devfeed.tech/tags/library.md>), [tests](<https://devfeed.tech/tags/tests.md>), [unit-tests](<https://devfeed.tech/tags/unit-tests.md>)

### AI overview

A tutorial on testing Kotlin coroutines when code uses the Main dispatcher. It explains how to configure a TestCoroutineScheduler and TestDispatcher with kotlinx-coroutines-test, compares StandardTestDispatcher and UnconfinedTestDispatcher, and warns against the deprecated TestCoroutineDispatcher.

### Source excerpt

Using TestCoroutineScheduler, a scheduler for coroutines used in tests, that provides the delay-skipping behavior.

## Animating visibility vs alpha in Compose

DevFeed: [Animating visibility vs alpha in Compose](<https://devfeed.tech/articles/animating-visibility-vs-alpha-in-compose-22647.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/animatedvisibility-animate-float-as-state-alpha-position>)

Author: james shvarts

Published: 2022-06-13T03:26:33Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [animation](<https://devfeed.tech/tags/animation.md>), [apis](<https://devfeed.tech/tags/apis.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [image](<https://devfeed.tech/tags/image.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>), [state](<https://devfeed.tech/tags/state.md>), [ui](<https://devfeed.tech/tags/ui.md>), [visibility](<https://devfeed.tech/tags/visibility.md>)

### AI overview

This tutorial compares AnimatedVisibility with animateFloatAsState in Jetpack Compose. It explains that AnimatedVisibility can change the layout when content enters or leaves the composition, while keeping content in the composition and animating alpha can preserve the position of other elements.

### Source excerpt

Covers example when animateFloatAsState is what you need instead of AnimatedVisibility

## Practical Compose Slot API example

DevFeed: [Practical Compose Slot API example](<https://devfeed.tech/articles/practical-compose-slot-api-example-22655.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-slot-api-example-composable-content-lambda>)

Author: James Shvarts

Published: 2022-05-31T12:54:19Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Android](<https://devfeed.tech/topics/android.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [api](<https://devfeed.tech/tags/api.md>), [code](<https://devfeed.tech/tags/code.md>), [components](<https://devfeed.tech/tags/components.md>), [compose](<https://devfeed.tech/tags/compose.md>), [data-class](<https://devfeed.tech/tags/data-class.md>), [how-to](<https://devfeed.tech/tags/how-to.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [layout](<https://devfeed.tech/tags/layout.md>), [learn](<https://devfeed.tech/tags/learn.md>), [screen](<https://devfeed.tech/tags/screen.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

A practical example of using the Compose Slot API pattern to build configurable Android screen sections with Kotlin composable content lambdas. It models section titles, optional filters, and section-specific content for reuse and flexibility.

### Source excerpt

Learn how to manage screen sections using Slot API pattern in Compose

## Lazy Grid layouts in Compose

DevFeed: [Lazy Grid layouts in Compose](<https://devfeed.tech/articles/lazy-grid-layouts-in-compose-22660.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/lazy-grids-gridcells-fixed-adaptive-custom-compose>)

Author: James Shvarts

Published: 2022-05-26T02:39:38Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [adaptive](<https://devfeed.tech/tags/adaptive.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [examples](<https://devfeed.tech/tags/examples.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [layout](<https://devfeed.tech/tags/layout.md>)

### AI overview

This tutorial explains three ways to build lazy grid layouts in Jetpack Compose: fixed cell counts, adaptive cell sizing, and custom grid configurations. It also discusses spacing, orientation changes, and examples using source code.

### Source excerpt

Covers 3 ways to build lazy grid layouts using fixed, adaptive and custom configuration

## Lazy layouts contentPadding

DevFeed: [Lazy layouts contentPadding](<https://devfeed.tech/articles/lazy-layouts-contentpadding-22661.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/lazy-layouts-lazyrow-lazycolumn-contentpadding-compose>)

Author: James Shvarts

Published: 2022-05-22T12:57:51Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [implementation](<https://devfeed.tech/tags/implementation.md>), [issue](<https://devfeed.tech/tags/issue.md>), [layout](<https://devfeed.tech/tags/layout.md>), [padding](<https://devfeed.tech/tags/padding.md>), [parameter](<https://devfeed.tech/tags/parameter.md>), [recyclerview](<https://devfeed.tech/tags/recyclerview.md>)

### AI overview

A Compose tutorial explains how to use contentPadding in lazy layouts so the first and last items receive padding without clipping the items between them. It contrasts contentPadding with padding and identifies clipping caused by using padding on the layout.

### Source excerpt

Controlling padding for first and last item in a lazy layout in Compose

## Composable functions and return types

DevFeed: [Composable functions and return types](<https://devfeed.tech/articles/composable-functions-and-return-types-22652.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-composable-return-types>)

Author: James Shvarts

Published: 2022-05-21T17:51:19Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [API](<https://devfeed.tech/topics/api.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [compose](<https://devfeed.tech/tags/compose.md>), [function](<https://devfeed.tech/tags/function.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [lifecycle](<https://devfeed.tech/tags/lifecycle.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains Jetpack Compose composable return types. Composables that emit UI generally return Unit, while factory-style composables return values and do not emit UI. It also covers naming conventions, composition lifecycle, recomposition, idempotence, and side effects.

### Source excerpt

Exploring composable function characteristics and return types

## Compose phases and optimizations

DevFeed: [Compose phases and optimizations](<https://devfeed.tech/articles/compose-phases-and-optimizations-22653.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-phases-optimizing-composition-layout-drawing>)

Author: James Shvarts

Published: 2022-05-14T01:27:04Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Optimization](<https://devfeed.tech/topics/optimization.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>)

Tags: [canvas](<https://devfeed.tech/tags/canvas.md>), [code](<https://devfeed.tech/tags/code.md>), [getting-started](<https://devfeed.tech/tags/getting-started.md>), [google-i-o](<https://devfeed.tech/tags/google-i-o.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [optimization](<https://devfeed.tech/tags/optimization.md>), [performance](<https://devfeed.tech/tags/performance.md>), [user-interface](<https://devfeed.tech/tags/user-interface.md>)

### AI overview

This tutorial explains the three Jetpack Compose rendering phases--Composition, Layout, and Drawing--and shows how to improve animation performance by limiting recomposition and layout work. It demonstrates moving changing color state into a Canvas drawing operation so only the Drawing phase repeats.

### Source excerpt

Learn about Compose Phases and optimizing UI by controlling what Phases get executed when data in composable changes

## Using MotionLayout in Compose

DevFeed: [Using MotionLayout in Compose](<https://devfeed.tech/articles/using-motionlayout-in-compose-22662.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/motionlayout-in-compose-motion-scene-json5>)

Author: James Shvarts

Published: 2022-05-05T11:52:55Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Android](<https://devfeed.tech/topics/android.md>), [android-development](<https://devfeed.tech/topics/android-development.md>), [Framework](<https://devfeed.tech/topics/framework.md>)

Tags: [android](<https://devfeed.tech/tags/android.md>), [android-development](<https://devfeed.tech/tags/android-development.md>), [animation](<https://devfeed.tech/tags/animation.md>), [compose](<https://devfeed.tech/tags/compose.md>), [constraintlayout](<https://devfeed.tech/tags/constraintlayout.md>), [dependency](<https://devfeed.tech/tags/dependency.md>), [experimental](<https://devfeed.tech/tags/experimental.md>), [jetpack](<https://devfeed.tech/tags/jetpack.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>), [motionlayout](<https://devfeed.tech/tags/motionlayout.md>)

### AI overview

This tutorial demonstrates MotionLayout in Jetpack Compose, using a JSON5 motion scene to define constraints and animate widgets such as a divider and an image. It also shows how to control animation progress with a composable and slider.

### Source excerpt

A demo of using MotionLayout with Jetpack Compose with motion scene set up as a JSON5

## Making reusable composables using Generics

DevFeed: [Making reusable composables using Generics](<https://devfeed.tech/articles/making-reusable-composables-using-generics-22651.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-composable-function-generics>)

Author: James Shvarts

Published: 2022-04-29T20:02:08Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [generics](<https://devfeed.tech/topics/generics.md>), [Compose](<https://devfeed.tech/topics/compose.md>), [Java](<https://devfeed.tech/topics/java.md>), [Kotlin](<https://devfeed.tech/topics/kotlin.md>)

Tags: [component](<https://devfeed.tech/tags/component.md>), [compose](<https://devfeed.tech/tags/compose.md>), [dialog](<https://devfeed.tech/tags/dialog.md>), [generics](<https://devfeed.tech/tags/generics.md>), [java](<https://devfeed.tech/tags/java.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [viewmodel](<https://devfeed.tech/tags/viewmodel.md>)

### AI overview

This tutorial shows how to use Java Generics with Jetpack Compose to build reusable composable components that support different model objects. It demonstrates a shared delete-confirmation dialog, call sites, optional properties, and state handling in a ViewModel.

### Source excerpt

Using Java Generics to create reusable shared components in Compose

## Getting started with Canvas in Compose

DevFeed: [Getting started with Canvas in Compose](<https://devfeed.tech/articles/getting-started-with-canvas-in-compose-22659.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/jetpack-compose-canvas-custom-component-ondraw-drawscope>)

Author: James Shvarts

Published: 2022-04-04T21:24:55Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Jetpack Compose](<https://devfeed.tech/topics/jetpack-compose.md>), [Canvas](<https://devfeed.tech/topics/canvas.md>), [ui](<https://devfeed.tech/topics/ui.md>)

Tags: [canvas](<https://devfeed.tech/tags/canvas.md>), [component](<https://devfeed.tech/tags/component.md>), [compose](<https://devfeed.tech/tags/compose.md>), [declarative](<https://devfeed.tech/tags/declarative.md>), [examples](<https://devfeed.tech/tags/examples.md>), [jetpack-compose](<https://devfeed.tech/tags/jetpack-compose.md>)

### AI overview

A tutorial on using Canvas in Jetpack Compose to draw shapes, manage sizing, and build reusable custom components. It also compares drawing directly with Canvas to drawing behind an existing composable using a modifier.

### Source excerpt

Explore DrawScope and create your first custom component using Canvas in Jetpack Compose

## Compose Row, Column and Scoped Modifiers

DevFeed: [Compose Row, Column and Scoped Modifiers](<https://devfeed.tech/articles/compose-row-column-and-scoped-modifiers-22654.md>)

Original publisher: [Read original article](<https://www.valueof.io/blog/compose-row-column-rowscope-columnscope-modifier>)

Author: James Shvarts

Published: 2022-03-29T02:48:35Z

Content type: tutorial

Language: en

Sources: [Android Blog - Mobile Dev Notes](<https://devfeed.tech/sources/android-blog-mobile-dev-notes.md>)

Topics: [Compose](<https://devfeed.tech/topics/compose.md>), [ui](<https://devfeed.tech/topics/ui.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [alignment](<https://devfeed.tech/tags/alignment.md>), [code](<https://devfeed.tech/tags/code.md>), [compose](<https://devfeed.tech/tags/compose.md>), [function](<https://devfeed.tech/tags/function.md>), [lambda](<https://devfeed.tech/tags/lambda.md>), [layout](<https://devfeed.tech/tags/layout.md>), [receiver](<https://devfeed.tech/tags/receiver.md>), [space](<https://devfeed.tech/tags/space.md>), [ui](<https://devfeed.tech/tags/ui.md>)

### AI overview

This tutorial explains how to build layouts in Jetpack Compose with Row and Column composables. It covers horizontal and vertical arrangement, alignment, scoped modifiers through RowScope and ColumnScope, modifier chaining, and scoping composables.

### Source excerpt

Explore the power of Row and Column composables and their respective RowScope and ColumnScope modifiers to layout child composables