Merge commit '60d7db4c3e3d60060e7ac021445ea1f510b7a1fb' into eclair-mr2 * commit '60d7db4c3e3d60060e7ac021445ea1f510b7a1fb': Fix #2262593: 42 ANR reports from android.process.acore
This commit is contained in:
@@ -59,11 +59,12 @@ public final class AssetManager {
|
|||||||
private static final String TAG = "AssetManager";
|
private static final String TAG = "AssetManager";
|
||||||
private static final boolean localLOGV = Config.LOGV || false;
|
private static final boolean localLOGV = Config.LOGV || false;
|
||||||
|
|
||||||
private static final Object mSync = new Object();
|
private static final Object sSync = new Object();
|
||||||
private static final TypedValue mValue = new TypedValue();
|
private static AssetManager sSystem = null;
|
||||||
private static final long[] mOffsets = new long[2];
|
|
||||||
private static AssetManager mSystem = null;
|
|
||||||
|
|
||||||
|
private final TypedValue mValue = new TypedValue();
|
||||||
|
private final long[] mOffsets = new long[2];
|
||||||
|
|
||||||
// For communication with native code.
|
// For communication with native code.
|
||||||
private int mObject;
|
private int mObject;
|
||||||
|
|
||||||
@@ -71,9 +72,7 @@ public final class AssetManager {
|
|||||||
|
|
||||||
private int mNumRefs = 1;
|
private int mNumRefs = 1;
|
||||||
private boolean mOpen = true;
|
private boolean mOpen = true;
|
||||||
private String mAssetDir;
|
|
||||||
private String mAppName;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a new AssetManager containing only the basic system assets.
|
* Create a new AssetManager containing only the basic system assets.
|
||||||
* Applications will not generally use this method, instead retrieving the
|
* Applications will not generally use this method, instead retrieving the
|
||||||
@@ -82,7 +81,7 @@ public final class AssetManager {
|
|||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
public AssetManager() {
|
public AssetManager() {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
init();
|
init();
|
||||||
if (localLOGV) Log.v(TAG, "New asset manager: " + this);
|
if (localLOGV) Log.v(TAG, "New asset manager: " + this);
|
||||||
ensureSystemAssets();
|
ensureSystemAssets();
|
||||||
@@ -90,11 +89,11 @@ public final class AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void ensureSystemAssets() {
|
private static void ensureSystemAssets() {
|
||||||
synchronized (mSync) {
|
synchronized (sSync) {
|
||||||
if (mSystem == null) {
|
if (sSystem == null) {
|
||||||
AssetManager system = new AssetManager(true);
|
AssetManager system = new AssetManager(true);
|
||||||
system.makeStringBlocks(false);
|
system.makeStringBlocks(false);
|
||||||
mSystem = system;
|
sSystem = system;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,14 +110,14 @@ public final class AssetManager {
|
|||||||
*/
|
*/
|
||||||
public static AssetManager getSystem() {
|
public static AssetManager getSystem() {
|
||||||
ensureSystemAssets();
|
ensureSystemAssets();
|
||||||
return mSystem;
|
return sSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Close this asset manager.
|
* Close this asset manager.
|
||||||
*/
|
*/
|
||||||
public void close() {
|
public void close() {
|
||||||
synchronized(mSync) {
|
synchronized(this) {
|
||||||
//System.out.println("Release: num=" + mNumRefs
|
//System.out.println("Release: num=" + mNumRefs
|
||||||
// + ", released=" + mReleased);
|
// + ", released=" + mReleased);
|
||||||
if (mOpen) {
|
if (mOpen) {
|
||||||
@@ -133,7 +132,7 @@ public final class AssetManager {
|
|||||||
* identifier for the current configuration / skin.
|
* identifier for the current configuration / skin.
|
||||||
*/
|
*/
|
||||||
/*package*/ final CharSequence getResourceText(int ident) {
|
/*package*/ final CharSequence getResourceText(int ident) {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
TypedValue tmpValue = mValue;
|
TypedValue tmpValue = mValue;
|
||||||
int block = loadResourceValue(ident, tmpValue, true);
|
int block = loadResourceValue(ident, tmpValue, true);
|
||||||
if (block >= 0) {
|
if (block >= 0) {
|
||||||
@@ -151,7 +150,7 @@ public final class AssetManager {
|
|||||||
* identifier for the current configuration / skin.
|
* identifier for the current configuration / skin.
|
||||||
*/
|
*/
|
||||||
/*package*/ final CharSequence getResourceBagText(int ident, int bagEntryId) {
|
/*package*/ final CharSequence getResourceBagText(int ident, int bagEntryId) {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
TypedValue tmpValue = mValue;
|
TypedValue tmpValue = mValue;
|
||||||
int block = loadResourceBagValue(ident, bagEntryId, tmpValue, true);
|
int block = loadResourceBagValue(ident, bagEntryId, tmpValue, true);
|
||||||
if (block >= 0) {
|
if (block >= 0) {
|
||||||
@@ -229,7 +228,7 @@ public final class AssetManager {
|
|||||||
|
|
||||||
/*package*/ final void ensureStringBlocks() {
|
/*package*/ final void ensureStringBlocks() {
|
||||||
if (mStringBlocks == null) {
|
if (mStringBlocks == null) {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (mStringBlocks == null) {
|
if (mStringBlocks == null) {
|
||||||
makeStringBlocks(true);
|
makeStringBlocks(true);
|
||||||
}
|
}
|
||||||
@@ -238,14 +237,14 @@ public final class AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final void makeStringBlocks(boolean copyFromSystem) {
|
private final void makeStringBlocks(boolean copyFromSystem) {
|
||||||
final int sysNum = copyFromSystem ? mSystem.mStringBlocks.length : 0;
|
final int sysNum = copyFromSystem ? sSystem.mStringBlocks.length : 0;
|
||||||
final int num = getStringBlockCount();
|
final int num = getStringBlockCount();
|
||||||
mStringBlocks = new StringBlock[num];
|
mStringBlocks = new StringBlock[num];
|
||||||
if (localLOGV) Log.v(TAG, "Making string blocks for " + this
|
if (localLOGV) Log.v(TAG, "Making string blocks for " + this
|
||||||
+ ": " + num);
|
+ ": " + num);
|
||||||
for (int i=0; i<num; i++) {
|
for (int i=0; i<num; i++) {
|
||||||
if (i < sysNum) {
|
if (i < sysNum) {
|
||||||
mStringBlocks[i] = mSystem.mStringBlocks[i];
|
mStringBlocks[i] = sSystem.mStringBlocks[i];
|
||||||
} else {
|
} else {
|
||||||
mStringBlocks[i] = new StringBlock(getNativeStringBlock(i), true);
|
mStringBlocks[i] = new StringBlock(getNativeStringBlock(i), true);
|
||||||
}
|
}
|
||||||
@@ -293,7 +292,7 @@ public final class AssetManager {
|
|||||||
*/
|
*/
|
||||||
public final InputStream open(String fileName, int accessMode)
|
public final InputStream open(String fileName, int accessMode)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (!mOpen) {
|
if (!mOpen) {
|
||||||
throw new RuntimeException("Assetmanager has been closed");
|
throw new RuntimeException("Assetmanager has been closed");
|
||||||
}
|
}
|
||||||
@@ -308,7 +307,7 @@ public final class AssetManager {
|
|||||||
|
|
||||||
public final AssetFileDescriptor openFd(String fileName)
|
public final AssetFileDescriptor openFd(String fileName)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (!mOpen) {
|
if (!mOpen) {
|
||||||
throw new RuntimeException("Assetmanager has been closed");
|
throw new RuntimeException("Assetmanager has been closed");
|
||||||
}
|
}
|
||||||
@@ -384,7 +383,7 @@ public final class AssetManager {
|
|||||||
*/
|
*/
|
||||||
public final InputStream openNonAsset(int cookie, String fileName, int accessMode)
|
public final InputStream openNonAsset(int cookie, String fileName, int accessMode)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (!mOpen) {
|
if (!mOpen) {
|
||||||
throw new RuntimeException("Assetmanager has been closed");
|
throw new RuntimeException("Assetmanager has been closed");
|
||||||
}
|
}
|
||||||
@@ -404,7 +403,7 @@ public final class AssetManager {
|
|||||||
|
|
||||||
public final AssetFileDescriptor openNonAssetFd(int cookie,
|
public final AssetFileDescriptor openNonAssetFd(int cookie,
|
||||||
String fileName) throws IOException {
|
String fileName) throws IOException {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (!mOpen) {
|
if (!mOpen) {
|
||||||
throw new RuntimeException("Assetmanager has been closed");
|
throw new RuntimeException("Assetmanager has been closed");
|
||||||
}
|
}
|
||||||
@@ -463,7 +462,7 @@ public final class AssetManager {
|
|||||||
*/
|
*/
|
||||||
/*package*/ final XmlBlock openXmlBlockAsset(int cookie, String fileName)
|
/*package*/ final XmlBlock openXmlBlockAsset(int cookie, String fileName)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (!mOpen) {
|
if (!mOpen) {
|
||||||
throw new RuntimeException("Assetmanager has been closed");
|
throw new RuntimeException("Assetmanager has been closed");
|
||||||
}
|
}
|
||||||
@@ -477,13 +476,13 @@ public final class AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*package*/ void xmlBlockGone() {
|
/*package*/ void xmlBlockGone() {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
decRefsLocked();
|
decRefsLocked();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*package*/ final int createTheme() {
|
/*package*/ final int createTheme() {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
if (!mOpen) {
|
if (!mOpen) {
|
||||||
throw new RuntimeException("Assetmanager has been closed");
|
throw new RuntimeException("Assetmanager has been closed");
|
||||||
}
|
}
|
||||||
@@ -493,7 +492,7 @@ public final class AssetManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*package*/ final void releaseTheme(int theme) {
|
/*package*/ final void releaseTheme(int theme) {
|
||||||
synchronized (mSync) {
|
synchronized (this) {
|
||||||
deleteTheme(theme);
|
deleteTheme(theme);
|
||||||
decRefsLocked();
|
decRefsLocked();
|
||||||
}
|
}
|
||||||
@@ -523,7 +522,7 @@ public final class AssetManager {
|
|||||||
return len > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)len;
|
return len > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int)len;
|
||||||
}
|
}
|
||||||
public final void close() throws IOException {
|
public final void close() throws IOException {
|
||||||
synchronized (AssetManager.mSync) {
|
synchronized (AssetManager.this) {
|
||||||
if (mAsset != 0) {
|
if (mAsset != 0) {
|
||||||
destroyAsset(mAsset);
|
destroyAsset(mAsset);
|
||||||
mAsset = 0;
|
mAsset = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user