e356292467
It turns out this was not a problem in the resource code at all. Rather, the system process has a cache of pre-loaded attributes it uses to avoid continually reloading things as it needs them. Well it turns out this cache wasn't flushed after a package was uninstalled or a configuration changed, so you could re-install an app where you change its style resources so its theme now points to one that is inconsistent in the cache. This is mostly a problem for developers, where they continually install new versions of an app where resources have changed. This could possibly show up when updating an app on a normal phone, although the problem would eventually correct itself since this cache uses weak references. Anyway, the cache is now reworked to be flushed appropriately. This change also includes an update to aapt to be able to dump the contents of bags in resources. |
||
---|---|---|
.. | ||
Android.mk | ||
Asset.cpp | ||
AssetDir.cpp | ||
AssetManager.cpp | ||
BackupData.cpp | ||
BackupHelpers.cpp | ||
Binder.cpp | ||
BpBinder.cpp | ||
BufferedTextOutput.cpp | ||
CallStack.cpp | ||
CharacterData.h | ||
Debug.cpp | ||
executablepath_darwin.cpp | ||
executablepath_linux.cpp | ||
FileMap.cpp | ||
futex_synchro.c | ||
IDataConnection.cpp | ||
IInterface.cpp | ||
IMemory.cpp | ||
InetAddress.cpp | ||
IPCThreadState.cpp | ||
IPermissionController.cpp | ||
IServiceManager.cpp | ||
LogSocket.cpp | ||
MemoryBase.cpp | ||
MemoryDealer.cpp | ||
MemoryHeapBase.cpp | ||
MemoryHeapPmem.cpp | ||
misc.cpp | ||
MODULE_LICENSE_APACHE2 | ||
NOTICE | ||
Parcel.cpp | ||
Pipe.cpp | ||
ported.cpp | ||
ProcessState.cpp | ||
README | ||
RefBase.cpp | ||
ResourceTypes.cpp | ||
SharedBuffer.cpp | ||
Socket.cpp | ||
Static.cpp | ||
StopWatch.cpp | ||
String8.cpp | ||
String16.cpp | ||
SystemClock.cpp | ||
TextOutput.cpp | ||
Threads.cpp | ||
TimerProbe.cpp | ||
Timers.cpp | ||
Unicode.cpp | ||
VectorImpl.cpp | ||
ZipEntry.cpp | ||
ZipFile.cpp | ||
ZipFileCRO.cpp | ||
ZipFileRO.cpp | ||
ZipUtils.cpp |
Android Utility Function Library If you need a feature that is native to Linux but not present on other platforms, construct a platform-dependent implementation that shares the Linux interface. That way the actual device runs as "light" as possible. If that isn't feasible, create a system-independent interface and hide the details. The ultimate goal is *not* to create a super-duper platform abstraction layer. The goal is to provide an optimized solution for Linux with reasonable implementations for other platforms.