# Print output for @column tags ?>
Developers

- Design
- Develop
- Distribute

Developer Console

## Most visited

## Recently visited

## Results for

Summary: Constants | Methods | Inherited Methods

# ComponentCallbacks2

`public interface ComponentCallbacks2`
`implements ComponentCallbacks`

android.content.ComponentCallbacks2

Known indirect subclasses AbstractInputMethodService, AccessibilityService, AccountAuthenticatorActivity, Activity, ActivityGroup, AliasActivity, Application, AutofillService, CallRedirectionService, CallScreeningService, CameraPrewarmService, CarrierMessagingClientService, CarrierMessagingService, CarrierService, ChooserTargetService, and 51 others.
AbstractInputMethodService | AbstractInputMethodService provides a abstract base class for input methods.
AccessibilityService | Accessibility services should only be used to assist users with disabilities in using Android devices and apps.
AccountAuthenticatorActivity | This class is deprecated. Applications should extend Activity themselves. This class is not compatible with AppCompat, and the functionality it provides is not complex.
Activity | An activity is a single, focused thing that the user can do.
ActivityGroup | This class is deprecated. Use the new `Fragment` and `FragmentManager` APIs instead; these are also available on older platforms through the Android compatibility package.
AliasActivity | This class is deprecated. Use `<activity-alias>` or subclass Activity directly.
Application | Base class for maintaining global application state.
AutofillService | An `AutofillService` is a service used to automatically fill the contents of the screen on behalf of a given user - for more information about autofill, read Autofill Framework.
CallRedirectionService | This service can be implemented to interact between Telecom and its implementor for making outgoing call with optional redirection/cancellation purposes.
CallScreeningService | This service can be implemented by the default dialer (see `TelecomManager#getDefaultDialerPackage()`) or a third party app to allow or disallow incoming calls before they are shown to a user.
CameraPrewarmService | Extend this class to implement a camera prewarm service.
CarrierMessagingClientService | If the default SMS app has a service that extends this class, the system always tries to bind it so that the process is always running, which allows the app to have a persistent connection to the server.
CarrierMessagingService | A service that receives calls from the system when new SMS and MMS are sent or received.
CarrierService | A service that exposes carrier-specific functionality to the system.
ChooserTargetService | This class is deprecated. For publishing direct share targets, please follow the instructions in https://developer.android.com/training/sharing/receive.html#providing-direct-share-targets instead.
ConditionProviderService | This class is deprecated. Instead of using an automatically bound service, use `NotificationManager.setAutomaticZenRuleState(String, Condition)` to tell the system about the state of your rule. In order to maintain a link from Settings to your rule configuration screens, provide a configuration activity that handles `NotificationManager.ACTION_AUTOMATIC_ZEN_RULE` on your `AutomaticZenRule` via `AutomaticZenRule.setConfigurationActivity(ComponentName)`.
ConnectionService | An abstract service that should be implemented by any apps which either: Can make phone calls (VoIP or otherwise) and want those calls to be integrated into the built-in phone app.
ContentProvider | Content providers are one of the primary building blocks of Android applications, providing content to applications.
ControlsProviderService | Service implementation allowing applications to contribute controls to the System UI.
DeviceAdminService | Base class for a service that device owner/profile owners can optionally have.
DialogFragment | This class is deprecated. Use the Support Library `DialogFragment` for consistent behavior across all devices and access to Lifecycle.
DocumentsProvider | Base class for a document provider.
DreamService | Extend this class to implement a custom dream (available to the user as a "Daydream").
ExpandableListActivity | This class is deprecated. Use `RecyclerView` or use `ExpandableListView` directly
Fragment | This class is deprecated. Use the Support Library `Fragment` for consistent behavior across all devices and access to Lifecycle.
HostApduService | HostApduService is a convenience `Service` class that can be extended to emulate an NFC card inside an Android service component.
HostNfcFService | HostNfcFService is a convenience `Service` class that can be extended to emulate an NFC-F card inside an Android service component.
InCallService | This service is implemented by an app that wishes to provide functionality for managing phone calls.
InputMethodService | InputMethodService provides a standard implementation of an InputMethod, which final implementations can derive from and customize.
IntentService | This class is deprecated. IntentService is subject to all the background execution limits imposed with Android 8.0 (API level 26). Consider using `WorkManager` or `JobIntentService`, which uses jobs instead of services when running on Android 8.0 or higher.
JobService | Entry point for the callback from the `JobScheduler`.
LauncherActivity | This class is deprecated. Applications can implement this UI themselves using `RecyclerView` and `PackageManager.queryIntentActivities(Intent, int)`
ListActivity | This class is deprecated. Use `ListFragment` or `RecyclerView` to implement your Activity instead.
ListFragment | This class is deprecated. Use the Support Library `ListFragment` for consistent behavior across all devices and access to Lifecycle.
MediaBrowserService | Base class for media browser services.
MediaRoute2ProviderService | Base class for media route provider services.
MediaSession2Service | This API is not generally intended for third party application developers.
MidiDeviceService | A service that implements a virtual MIDI device.
MockApplication | This class is deprecated. Use a mocking framework like Mockito. New tests should be written using the Android Testing Support Library.
MockContentProvider | Mock implementation of ContentProvider.
NativeActivity | Convenience for implementing an activity that will be implemented purely in native code.
NotificationListenerService | A service that receives calls from the system when new notifications are posted or removed, or their ranking changed.
OffHostApduService | OffHostApduService is a convenience `Service` class that can be extended to describe one or more NFC applications that are residing off-host, for example on an embedded secure element or a UICC.
PreferenceActivity | This class is deprecated. Use the AndroidX Preference Library for consistent behavior across all devices. For more information on using the AndroidX Preference Library see Settings.
PreferenceFragment | This class is deprecated. Use the AndroidX Preference Library for consistent behavior across all devices. For more information on using the AndroidX Preference Library see Settings.
PrintService | This is the base class for implementing print services.
QuickAccessWalletService | A `QuickAccessWalletService` provides a list of `WalletCard`s shown in the Quick Access Wallet.
RecognitionService | This class provides a base class for recognition service implementations.
RemoteViewsService | The service to be connected to for a remote adapter to request RemoteViews.
SearchRecentSuggestionsProvider | This superclass can be used to create a simple search suggestions provider for your application.
Service | A Service is an application component representing either an application's desire to perform a longer-running operation while not interacting with the user or to supply functionality for other applications to use.
SettingInjectorService | Dynamically specifies the summary (subtitle) and enabled status of a preference injected into the list of app settings displayed by the system settings app For use only by apps that are included in the system image, for preferences that affect multiple apps.
SliceProvider | A SliceProvider allows an app to provide content to be displayed in system spaces.
SpellCheckerService | SpellCheckerService provides an abstract base class for a spell checker.
TabActivity | This class is deprecated. New applications should use Fragments instead of this class; to continue to run on older devices, you can use the v4 support library which provides a version of the Fragment API that is compatible down to `Build.VERSION_CODES.DONUT`.
TextToSpeechService | Abstract base class for TTS engine implementations.
TileService | A TileService provides the user a tile that can be added to Quick Settings.
TvInputService | The TvInputService class represents a TV input or source such as HDMI or built-in tuner which provides pass-through video or broadcast TV programs.
VisualVoicemailService | This service is implemented by dialer apps that wishes to handle OMTP or similar visual voicemails.
VoiceInteractionService | Top-level service of the current global voice interactor, which is providing support for hotwording, the back-end of a `VoiceInteractor`, etc.
VoiceInteractionSession | An active voice interaction session, providing a facility for the implementation to interact with the user in the voice interaction layer.
VoiceInteractionSessionService | An active voice interaction session, initiated by a `VoiceInteractionService`.
VpnService | VpnService is a base class for applications to extend and build their own VPN solutions.
VrListenerService | A service that is bound from the system while running in virtual reality (VR) mode.
WallpaperService | A wallpaper service is responsible for showing a live wallpaper behind applications that would like to sit on top of it.
WebViewFragment | This class is deprecated. Manually call `WebView#onPause()` and `WebView#onResume()`

Extended `ComponentCallbacks` interface with a new callback for finer-grained memory management. This interface is available in all application components (`Activity`, `Service`, `ContentProvider`, and `Application`).

You should implement `onTrimMemory(int)` to incrementally release memory based on current system constraints. Using this callback to release your resources helps provide a more responsive system overall, but also directly benefits the user experience for your app by allowing the system to keep your process alive longer. That is, if you don't trim your resources based on memory levels defined by this callback, the system is more likely to kill your process while it is cached in the least-recently used (LRU) list, thus requiring your app to restart and restore all state when the user returns to it.

The values provided by `onTrimMemory(int)` do not represent a single linear progression of memory limits, but provide you different types of clues about memory availability:

- When your app is running:
  1. `TRIM_MEMORY_RUNNING_MODERATE`
     The device is beginning to run low on memory. Your app is running and not killable.
  2. `TRIM_MEMORY_RUNNING_LOW`
     The device is running much lower on memory. Your app is running and not killable, but please release unused resources to improve system performance (which directly impacts your app's performance).
  3. `TRIM_MEMORY_RUNNING_CRITICAL`
     The device is running extremely low on memory. Your app is not yet considered a killable process, but the system will begin killing background processes if apps do not release resources, so you should release non-critical resources now to prevent performance degradation.
- When your app's visibility changes:
  1. `TRIM_MEMORY_UI_HIDDEN`
     Your app's UI is no longer visible, so this is a good time to release large resources that are used only by your UI.
- When your app's process resides in the background LRU list:
  1. `TRIM_MEMORY_BACKGROUND`
     The system is running low on memory and your process is near the beginning of the LRU list. Although your app process is not at a high risk of being killed, the system may already be killing processes in the LRU list, so you should release resources that are easy to recover so your process will remain in the list and resume quickly when the user returns to your app.
  2. `TRIM_MEMORY_MODERATE`
     The system is running low on memory and your process is near the middle of the LRU list. If the system becomes further constrained for memory, there's a chance your process will be killed.
  3. `TRIM_MEMORY_COMPLETE`
     The system is running low on memory and your process is one of the first to be killed if the system does not recover memory now. You should release absolutely everything that's not critical to resuming your app state.

     To support API levels lower than 14, you can use the `ComponentCallbacks.onLowMemory()` method as a fallback that's roughly equivalent to the `ComponentCallbacks2#TRIM_MEMORY_COMPLETE` level.

  Note: When the system begins killing processes in the LRU list, although it primarily works bottom-up, it does give some consideration to which processes are consuming more memory and will thus provide more gains in memory if killed. So the less memory you consume while in the LRU list overall, the better your chances are to remain in the list and be able to quickly resume.

More information about the different stages of a process lifecycle (such as what it means to be placed in the background LRU list) is provided in the Processes and Threads document.

## Summary

### Constants
`int` | `TRIM_MEMORY_BACKGROUND` Level for `onTrimMemory(int)`: the process has gone on to the LRU list.
`int` | `TRIM_MEMORY_COMPLETE` Level for `onTrimMemory(int)`: the process is nearing the end of the background LRU list, and if more memory isn't found soon it will be killed.
`int` | `TRIM_MEMORY_MODERATE` Level for `onTrimMemory(int)`: the process is around the middle of the background LRU list; freeing memory can help the system keep other processes running later in the list for better overall performance.
`int` | `TRIM_MEMORY_RUNNING_CRITICAL` Level for `onTrimMemory(int)`: the process is not an expendable background process, but the device is running extremely low on memory and is about to not be able to keep any background processes running.
`int` | `TRIM_MEMORY_RUNNING_LOW` Level for `onTrimMemory(int)`: the process is not an expendable background process, but the device is running low on memory.
`int` | `TRIM_MEMORY_RUNNING_MODERATE` Level for `onTrimMemory(int)`: the process is not an expendable background process, but the device is running moderately low on memory.
`int` | `TRIM_MEMORY_UI_HIDDEN` Level for `onTrimMemory(int)`: the process had been showing a user interface, and is no longer doing so.

### Public methods
`abstract void` | `onTrimMemory(int level)` Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.

### Inherited methods
From interface `android.content.ComponentCallbacks`
`abstract void` | `onConfigurationChanged(Configuration newConfig)` Called by the system when the device configuration changes while your component is running.
`abstract void` | `onLowMemory()` This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.

## Constants

### TRIM_MEMORY_BACKGROUND

    public static final int TRIM_MEMORY_BACKGROUND

Level for `onTrimMemory(int)`: the process has gone on to the LRU list. This is a good opportunity to clean up resources that can efficiently and quickly be re-built if the user returns to the app.

Constant Value: 40 (0x00000028)

### TRIM_MEMORY_COMPLETE

    public static final int TRIM_MEMORY_COMPLETE

Level for `onTrimMemory(int)`: the process is nearing the end of the background LRU list, and if more memory isn't found soon it will be killed.

Constant Value: 80 (0x00000050)

### TRIM_MEMORY_MODERATE

    public static final int TRIM_MEMORY_MODERATE

Level for `onTrimMemory(int)`: the process is around the middle of the background LRU list; freeing memory can help the system keep other processes running later in the list for better overall performance.

Constant Value: 60 (0x0000003c)

### TRIM_MEMORY_RUNNING_CRITICAL

    public static final int TRIM_MEMORY_RUNNING_CRITICAL

Level for `onTrimMemory(int)`: the process is not an expendable background process, but the device is running extremely low on memory and is about to not be able to keep any background processes running. Your running process should free up as many non-critical resources as it can to allow that memory to be used elsewhere. The next thing that will happen after this is `ComponentCallbacks.onLowMemory()` called to report that nothing at all can be kept in the background, a situation that can start to notably impact the user.

Constant Value: 15 (0x0000000f)

### TRIM_MEMORY_RUNNING_LOW

    public static final int TRIM_MEMORY_RUNNING_LOW

Level for `onTrimMemory(int)`: the process is not an expendable background process, but the device is running low on memory. Your running process should free up unneeded resources to allow that memory to be used elsewhere.

Constant Value: 10 (0x0000000a)

### TRIM_MEMORY_RUNNING_MODERATE

    public static final int TRIM_MEMORY_RUNNING_MODERATE

Level for `onTrimMemory(int)`: the process is not an expendable background process, but the device is running moderately low on memory. Your running process may want to release some unneeded resources for use elsewhere.

Constant Value: 5 (0x00000005)

### TRIM_MEMORY_UI_HIDDEN

    public static final int TRIM_MEMORY_UI_HIDDEN

Level for `onTrimMemory(int)`: the process had been showing a user interface, and is no longer doing so. Large allocations with the UI should be released at this point to allow memory to be better managed.

Constant Value: 20 (0x00000014)

## Public methods

### onTrimMemory

    public abstract void onTrimMemory (int level)

Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process. This will happen for example when it goes in the background and there is not enough memory to keep as many background processes running as desired. You should never compare to exact values of the level, since new intermediate values may be added -- you will typically want to compare if the value is greater or equal to a level you are interested in.

To retrieve the processes current trim level at any point, you can use `ActivityManager.getMyMemoryState(RunningAppProcessInfo)`.

Parameters
`level` | `int`: The context of the trim, giving a hint of the amount of trimming the application may like to perform. Value is `TRIM_MEMORY_COMPLETE`, `TRIM_MEMORY_MODERATE`, `TRIM_MEMORY_BACKGROUND`, `TRIM_MEMORY_UI_HIDDEN`, `TRIM_MEMORY_RUNNING_CRITICAL`, `TRIM_MEMORY_RUNNING_LOW`, or `TRIM_MEMORY_RUNNING_MODERATE`

Full name *
Email address *
Company / developer name
One of your Play Store app URLs *
Which best describes your business:*
Apps
Games
Apps & Games
*
*