diff options
author | Brad Fitzpatrick <bradfitz@android.com> | 2010-08-24 11:46:47 -0700 |
---|---|---|
committer | Brad Fitzpatrick <bradfitz@android.com> | 2010-08-24 11:47:19 -0700 |
commit | 97461bd25c3821f3fb6af9705f0612259c6b4492 (patch) | |
tree | fa090d0495b22759bc751f0f9ef6061bc9e9a0cd | |
parent | 2703a42d16af0e62da1bba02b6c935d98debf936 (diff) | |
download | frameworks_base-97461bd25c3821f3fb6af9705f0612259c6b4492.zip frameworks_base-97461bd25c3821f3fb6af9705f0612259c6b4492.tar.gz frameworks_base-97461bd25c3821f3fb6af9705f0612259c6b4492.tar.bz2 |
Some StrictMode API changes.
* rename setThreadBlockingPolicy to setThreadPolicy (opens the way to
using StrictMode for non-blocking-related things in the future?)
* add allowThreadDiskWrites() and allowThreadDiskReads() to modify the
current policy mask and return the old one. this will allow turning
off part of StrictMode during certain regions of code. (for
instance, writing to disk in Activity onPause...)
Change-Id: Ia1878153713f79299971fdab567fa15b3cb9d56c
-rw-r--r-- | api/current.xml | 62 | ||||
-rw-r--r-- | core/java/android/app/ActivityThread.java | 2 | ||||
-rw-r--r-- | core/java/android/os/StrictMode.java | 44 |
3 files changed, 81 insertions, 27 deletions
diff --git a/api/current.xml b/api/current.xml index bd87087..38756d3 100644 --- a/api/current.xml +++ b/api/current.xml @@ -129270,7 +129270,7 @@ deprecated="not deprecated" visibility="public" > -<method name="getThreadBlockingPolicy" +<method name="allowThreadDiskReads" return="int" abstract="false" native="false" @@ -129281,7 +129281,29 @@ visibility="public" > </method> -<method name="setThreadBlockingPolicy" +<method name="allowThreadDiskWrites" + return="int" + abstract="false" + native="false" + synchronized="false" + static="true" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="getThreadPolicy" + return="int" + abstract="false" + native="false" + synchronized="false" + static="true" + final="false" + deprecated="not deprecated" + visibility="public" +> +</method> +<method name="setThreadPolicy" return="void" abstract="false" native="false" @@ -258023,7 +258045,7 @@ > <parameter name="numBits" type="int"> </parameter> -<parameter name="rnd" type="java.util.Random"> +<parameter name="random" type="java.util.Random"> </parameter> </constructor> <constructor name="BigInteger" @@ -258037,7 +258059,7 @@ </parameter> <parameter name="certainty" type="int"> </parameter> -<parameter name="rnd" type="java.util.Random"> +<parameter name="unused" type="java.util.Random"> </parameter> </constructor> <constructor name="BigInteger" @@ -258047,7 +258069,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.lang.String"> +<parameter name="value" type="java.lang.String"> </parameter> </constructor> <constructor name="BigInteger" @@ -258057,7 +258079,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.lang.String"> +<parameter name="value" type="java.lang.String"> </parameter> <parameter name="radix" type="int"> </parameter> @@ -258081,7 +258103,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="byte[]"> +<parameter name="value" type="byte[]"> </parameter> </constructor> <method name="abs" @@ -258105,7 +258127,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="and" @@ -258118,7 +258140,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="andNot" @@ -258131,7 +258153,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="bitCount" @@ -258179,7 +258201,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="divide" @@ -258253,7 +258275,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="getLowestSetBit" @@ -258312,7 +258334,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="min" @@ -258325,7 +258347,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="mod" @@ -258379,7 +258401,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="negate" @@ -258425,7 +258447,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="pow" @@ -258453,7 +258475,7 @@ > <parameter name="bitLength" type="int"> </parameter> -<parameter name="rnd" type="java.util.Random"> +<parameter name="unused" type="java.util.Random"> </parameter> </method> <method name="remainder" @@ -258529,7 +258551,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <method name="testBit" @@ -258579,7 +258601,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="long"> +<parameter name="value" type="long"> </parameter> </method> <method name="xor" @@ -258592,7 +258614,7 @@ deprecated="not deprecated" visibility="public" > -<parameter name="val" type="java.math.BigInteger"> +<parameter name="value" type="java.math.BigInteger"> </parameter> </method> <field name="ONE" diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index c96d562..c07e3d3 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -3106,7 +3106,7 @@ public final class ActivityThread { (ApplicationInfo.FLAG_SYSTEM | ApplicationInfo.FLAG_UPDATED_SYSTEM_APP)) != 0 && !"user".equals(Build.TYPE)) { - StrictMode.setThreadBlockingPolicy( + StrictMode.setThreadPolicy( StrictMode.DISALLOW_DISK_WRITE | StrictMode.DISALLOW_DISK_READ | StrictMode.DISALLOW_NETWORK | diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java index ac12e10..7f7b02b 100644 --- a/core/java/android/os/StrictMode.java +++ b/core/java/android/os/StrictMode.java @@ -114,7 +114,7 @@ public final class StrictMode { * * @param policyMask a bitmask of DISALLOW_* and PENALTY_* values. */ - public static void setThreadBlockingPolicy(final int policyMask) { + public static void setThreadPolicy(final int policyMask) { // In addition to the Java-level thread-local in Dalvik's // BlockGuard, we also need to keep a native thread-local in // Binder in order to propagate the value across Binder calls, @@ -164,11 +164,43 @@ public final class StrictMode { * * @return the bitmask of all the DISALLOW_* and PENALTY_* bits currently enabled */ - public static int getThreadBlockingPolicy() { + public static int getThreadPolicy() { return BlockGuard.getThreadPolicy().getPolicyMask(); } /** + * Updates the current thread's policy mask to allow reading & + * writing to disk. + * + * @return the old policy mask, to be passed to setThreadPolicy to + * restore the policy. + */ + public static int allowThreadDiskWrites() { + int oldPolicy = getThreadPolicy(); + int newPolicy = oldPolicy & ~(DISALLOW_DISK_WRITE | DISALLOW_DISK_READ); + if (newPolicy != oldPolicy) { + setThreadPolicy(newPolicy); + } + return oldPolicy; + } + + /** + * Updates the current thread's policy mask to allow reading from + * disk. + * + * @return the old policy mask, to be passed to setThreadPolicy to + * restore the policy. + */ + public static int allowThreadDiskReads() { + int oldPolicy = getThreadPolicy(); + int newPolicy = oldPolicy & ~(DISALLOW_DISK_READ); + if (newPolicy != oldPolicy) { + setThreadPolicy(newPolicy); + } + return oldPolicy; + } + + /** * Parses the BlockGuard policy mask out from the Exception's * getMessage() String value. Kinda gross, but least * invasive. :/ @@ -413,13 +445,13 @@ public final class StrictMode { if (violationMaskSubset != 0) { int violationBit = parseViolationFromMessage(info.crashInfo.exceptionMessage); violationMaskSubset |= violationBit; - final int savedPolicy = getThreadBlockingPolicy(); + final int savedPolicy = getThreadPolicy(); try { // First, remove any policy before we call into the Activity Manager, // otherwise we'll infinite recurse as we try to log policy violations // to disk, thus violating policy, thus requiring logging, etc... // We restore the current policy below, in the finally block. - setThreadBlockingPolicy(0); + setThreadPolicy(0); ActivityManagerNative.getDefault().handleApplicationStrictModeViolation( RuntimeInit.getApplicationObject(), @@ -429,7 +461,7 @@ public final class StrictMode { Log.e(TAG, "RemoteException trying to handle StrictMode violation", e); } finally { // Restore the policy. - setThreadBlockingPolicy(savedPolicy); + setThreadPolicy(savedPolicy); } } @@ -487,7 +519,7 @@ public final class StrictMode { new LogStackTrace().printStackTrace(new PrintWriter(sw)); String ourStack = sw.toString(); - int policyMask = getThreadBlockingPolicy(); + int policyMask = getThreadPolicy(); boolean currentlyGathering = (policyMask & PENALTY_GATHER) != 0; int numViolations = p.readInt(); |