Save the date! Android Dev Summit is coming to Mountain View, CA on November 7-8, 2018.
added in API level 9

StrictMode.VmPolicy.Builder

public static final class StrictMode.VmPolicy.Builder
extends Object

java.lang.Object
   ↳ android.os.StrictMode.VmPolicy.Builder


Creates StrictMode.VmPolicy instances. Methods whose names start with detect specify what problems we should look for. Methods whose names start with penalty specify what we should do when we detect a problem.

You can call as many detect and penalty methods as you like. Currently order is insignificant: all penalties apply to all detected problems.

For example, detect everything and log anything that's found:

 StrictMode.VmPolicy policy = new StrictMode.VmPolicy.Builder()
     .detectAll()
     .penaltyLog()
     .build();
 StrictMode.setVmPolicy(policy);
 

Summary

Public constructors

StrictMode.VmPolicy.Builder()
StrictMode.VmPolicy.Builder(StrictMode.VmPolicy base)

Build upon an existing VmPolicy.

Public methods

StrictMode.VmPolicy build()

Construct the VmPolicy instance.

StrictMode.VmPolicy.Builder detectActivityLeaks()

Detect leaks of Activity subclasses.

StrictMode.VmPolicy.Builder detectAll()

Detect everything that's potentially suspect.

StrictMode.VmPolicy.Builder detectCleartextNetwork()

Detect any network traffic from the calling app which is not wrapped in SSL/TLS.

StrictMode.VmPolicy.Builder detectContentUriWithoutPermission()

Detect when the calling application sends a content:// Uri to another app without setting Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION.

StrictMode.VmPolicy.Builder detectFileUriExposure()

Detect when the calling application exposes a file:// Uri to another app.

StrictMode.VmPolicy.Builder detectLeakedClosableObjects()

Detect when an Closeable or other object with an explicit termination method is finalized without having been closed.

StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects()

Detect when a BroadcastReceiver or ServiceConnection is leaked during Context teardown.

StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects()

Detect when an SQLiteCursor or other SQLite object is finalized without having been closed.

StrictMode.VmPolicy.Builder detectNonSdkApiUsage()

Detect reflective usage of APIs that are not part of the public Android SDK.

StrictMode.VmPolicy.Builder detectUntaggedSockets()

Detect any sockets in the calling app which have not been tagged using TrafficStats.

StrictMode.VmPolicy.Builder penaltyDeath()

Crashes the whole process on violation.

StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork()

Crashes the whole process when cleartext network traffic is detected.

StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure()

Crashes the whole process when a file:// Uri is exposed beyond this app.

StrictMode.VmPolicy.Builder penaltyDropBox()

Enable detected violations log a stacktrace and timing data to the DropBox on policy violation.

StrictMode.VmPolicy.Builder penaltyListener(Executor executor, StrictMode.OnVmViolationListener listener)

Call #StrictMode.OnVmViolationListener.onVmViolation(Violation) on every violation.

StrictMode.VmPolicy.Builder penaltyLog()

Log detected violations to the system log.

StrictMode.VmPolicy.Builder permitNonSdkApiUsage()

Permit reflective usage of APIs that are not part of the public Android SDK.

StrictMode.VmPolicy.Builder setClassInstanceLimit(Class klass, int instanceLimit)

Set an upper bound on how many instances of a class can be in memory at once.

Inherited methods

Public constructors

StrictMode.VmPolicy.Builder

added in API level 9
public StrictMode.VmPolicy.Builder ()

StrictMode.VmPolicy.Builder

added in API level 11
public StrictMode.VmPolicy.Builder (StrictMode.VmPolicy base)

Build upon an existing VmPolicy.

Parameters
base StrictMode.VmPolicy

Public methods

build

added in API level 9
public StrictMode.VmPolicy build ()

Construct the VmPolicy instance.

Note: if no penalties are enabled before calling build, penaltyLog() is implicitly set.

Returns
StrictMode.VmPolicy

detectActivityLeaks

added in API level 11
public StrictMode.VmPolicy.Builder detectActivityLeaks ()

Detect leaks of Activity subclasses.

Returns
StrictMode.VmPolicy.Builder

detectAll

added in API level 9
public StrictMode.VmPolicy.Builder detectAll ()

Detect everything that's potentially suspect.

In the Honeycomb release this includes leaks of SQLite cursors, Activities, and other closable objects but will likely expand in future releases.

Returns
StrictMode.VmPolicy.Builder

detectCleartextNetwork

added in API level 23
public StrictMode.VmPolicy.Builder detectCleartextNetwork ()

Detect any network traffic from the calling app which is not wrapped in SSL/TLS. This can help you detect places that your app is inadvertently sending cleartext data across the network.

Using penaltyDeath() or penaltyDeathOnCleartextNetwork() will block further traffic on that socket to prevent accidental data leakage, in addition to crashing your process.

Using penaltyDropBox() will log the raw contents of the packet that triggered the violation.

This inspects both IPv4/IPv6 and TCP/UDP network traffic, but it may be subject to false positives, such as when STARTTLS protocols or HTTP proxies are used.

Returns
StrictMode.VmPolicy.Builder

detectContentUriWithoutPermission

added in API level 26
public StrictMode.VmPolicy.Builder detectContentUriWithoutPermission ()

Detect when the calling application sends a content:// Uri to another app without setting Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION.

Forgetting to include one or more of these flags when sending an intent is typically an app bug.

Returns
StrictMode.VmPolicy.Builder

detectFileUriExposure

added in API level 18
public StrictMode.VmPolicy.Builder detectFileUriExposure ()

Detect when the calling application exposes a file:// Uri to another app.

This exposure is discouraged since the receiving app may not have access to the shared path. For example, the receiving app may not have requested the Manifest.permission.READ_EXTERNAL_STORAGE runtime permission, or the platform may be sharing the Uri across user profile boundaries.

Instead, apps should use content:// Uris so the platform can extend temporary permission for the receiving app to access the resource.

Returns
StrictMode.VmPolicy.Builder

detectLeakedClosableObjects

added in API level 11
public StrictMode.VmPolicy.Builder detectLeakedClosableObjects ()

Detect when an Closeable or other object with an explicit termination method is finalized without having been closed.

You always want to explicitly close such objects to avoid unnecessary resources leaks.

Returns
StrictMode.VmPolicy.Builder

detectLeakedRegistrationObjects

added in API level 16
public StrictMode.VmPolicy.Builder detectLeakedRegistrationObjects ()

Detect when a BroadcastReceiver or ServiceConnection is leaked during Context teardown.

Returns
StrictMode.VmPolicy.Builder

detectLeakedSqlLiteObjects

added in API level 9
public StrictMode.VmPolicy.Builder detectLeakedSqlLiteObjects ()

Detect when an SQLiteCursor or other SQLite object is finalized without having been closed.

You always want to explicitly close your SQLite cursors to avoid unnecessary database contention and temporary memory leaks.

Returns
StrictMode.VmPolicy.Builder

detectNonSdkApiUsage

added in API level 28
public StrictMode.VmPolicy.Builder detectNonSdkApiUsage ()

Detect reflective usage of APIs that are not part of the public Android SDK.

Note that any non-SDK APIs that this processes accesses before this detection is enabled may not be detected. To ensure that all such API accesses are detected, you should apply this policy as early as possible after process creation.

Returns
StrictMode.VmPolicy.Builder

detectUntaggedSockets

added in API level 26
public StrictMode.VmPolicy.Builder detectUntaggedSockets ()

Detect any sockets in the calling app which have not been tagged using TrafficStats. Tagging sockets can help you investigate network usage inside your app, such as a narrowing down heavy usage to a specific library or component.

This currently does not detect sockets created in native code.

Returns
StrictMode.VmPolicy.Builder

penaltyDeath

added in API level 9
public StrictMode.VmPolicy.Builder penaltyDeath ()

Crashes the whole process on violation. This penalty runs at the end of all enabled penalties so you'll still get your logging or other violations before the process dies.

Returns
StrictMode.VmPolicy.Builder

penaltyDeathOnCleartextNetwork

added in API level 23
public StrictMode.VmPolicy.Builder penaltyDeathOnCleartextNetwork ()

Crashes the whole process when cleartext network traffic is detected.

Returns
StrictMode.VmPolicy.Builder

penaltyDeathOnFileUriExposure

added in API level 24
public StrictMode.VmPolicy.Builder penaltyDeathOnFileUriExposure ()

Crashes the whole process when a file:// Uri is exposed beyond this app.

Returns
StrictMode.VmPolicy.Builder

penaltyDropBox

added in API level 9
public StrictMode.VmPolicy.Builder penaltyDropBox ()

Enable detected violations log a stacktrace and timing data to the DropBox on policy violation. Intended mostly for platform integrators doing beta user field data collection.

Returns
StrictMode.VmPolicy.Builder

penaltyListener

added in API level 28
public StrictMode.VmPolicy.Builder penaltyListener (Executor executor, 
                StrictMode.OnVmViolationListener listener)

Call #StrictMode.OnVmViolationListener.onVmViolation(Violation) on every violation.

Parameters
executor Executor

This value must never be null.

listener StrictMode.OnVmViolationListener

This value must never be null.

Returns
StrictMode.VmPolicy.Builder

penaltyLog

added in API level 9
public StrictMode.VmPolicy.Builder penaltyLog ()

Log detected violations to the system log.

Returns
StrictMode.VmPolicy.Builder

permitNonSdkApiUsage

added in API level 28
public StrictMode.VmPolicy.Builder permitNonSdkApiUsage ()

Permit reflective usage of APIs that are not part of the public Android SDK. Note that this only affects StrictMode, the underlying runtime may continue to restrict or warn on access to methods that are not part of the public SDK.

Returns
StrictMode.VmPolicy.Builder

setClassInstanceLimit

added in API level 11
public StrictMode.VmPolicy.Builder setClassInstanceLimit (Class klass, 
                int instanceLimit)

Set an upper bound on how many instances of a class can be in memory at once. Helps to prevent object leaks.

Parameters
klass Class

instanceLimit int

Returns
StrictMode.VmPolicy.Builder