Memory is a valuable resource in any software development environment, but it's even more valuable on a mobile operating system where physical memory is often constrained. This is especially true for natively low-memory devices found commonly with Android (Go edition). There are a few ways to help optimize memory in your app to help it run smoothly in these environments.

## Best practices

### Release cache memory

There may not be enough memory to keep background processes running as you would in a typical environment. In this case, you can use[`onTrimMemory()`](https://developer.android.com/reference/android/content/ComponentCallbacks2#onTrimMemory(int))to trim unneeded memory from your app's process. To best identify the current trim level for your app, use[`ActivityManager.getMyMemoryState(RunningAppProcessInfo)`](https://developer.android.com/reference/android/app/ActivityManager#getMyMemoryState(android.app.ActivityManager.RunningAppProcessInfo))and optimize or trim any unnecessary resources. For example, you can trim unnecessary memory usage from expressions, search, view cache, or openable extensions to reduce the number of times your app experiences crashes or ANRs due to low memory.

### Task scheduling

Concurrent scheduling can lead to multiple memory intensive operations to run in parallel, leading to competition for resources exceeding the peak memory usage of an app. Try to appropriately allocate resources by separating processes into CPU intensive, low latency tasks in the right[thread pool](https://developer.android.com/guide/background/threading)to run on devices that may face various resource constraints.

### Memory leaks

Various tools, such as[Memory Profiler](https://developer.android.com/studio/profile/memory-profiler)in Android Studio and[Perfetto](https://perfetto.dev/docs/case-studies/memory)are specifically available to help find and reduce memory leaks within your app. It's highly encouraged that you use these tools to identify and fix potential memory issues to allow other components of your app to run without additional pressure on the system.

### Other tips

- Large images or drawables consume more memory in apps. Identify and optimize large or full-colored bitmaps to reduce memory usage.
- Try to choose other options for GIFs in your app when building for Android (Go edition) as GIFs consume a lot of memory.
- You can reduce PNG file sizes without losing image quality using tools like[WebP](https://developer.android.com/studio/write/convert-webp), pngcrush, and pngquant. All of these tools can reduce PNG file size while preserving the perceptive image quality.
- The aapt tool can optimize the image resources placed in`res/drawable/`with lossless compression during the build process. For example, the aapt tool can convert a true-color PNG that does not require more than 256 colors to an 8-bit PNG with a color palette. Doing so results in an image of equal quality but a smaller memory footprint.