Android 8.0中怎么實(shí)現(xiàn)緩存大小和緩存清理接口?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)建站自2013年創(chuàng)立以來,先為雨城等服務(wù)建站,雨城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為雨城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
獲取緩存大小接口
主要這里的方法已經(jīng)和7.0不兼容了。
import android.app.usage.UsageStats; import android.app.usage.UsageStatsManager; import android.content.Context; import android.content.pm.PackageManager; import android.os.Process; import android.os.storage.StorageManager; import java.io.IOException; import java.util.ArrayList; import java.util.Map; import android.app.usage.StorageStats; import android.app.usage.StorageStatsManager; public static long getCacheSizeByAndroidO(Context mContext, String mPackageName) { StorageManager storageManager = (StorageManager) mContext.getSystemService(Context.STORAGE_SERVICE); StorageStatsManager storageStatsManager = (StorageStatsManager) mContext.getSystemService(Context.STORAGE_STATS_SERVICE); try { StorageStats storageStats = storageStatsManager.queryStatsForPackage(StorageManager.UUID_DEFAULT, mPackageName, Process.myUserHandle()); return storageStats.getCacheBytes(); } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return 0L; }
清除緩存接口
這里的接口和7.0保持一致
PackageManager mPm = mContext.getPackageManager(); // need android.permission.DELETE_CACHE_FILES mPm.deleteApplicationCacheFiles(cacheItem.packageName, new IPackageDataObserver.Stub() { @Override public void onRemoveCompleted(final String packageName, final boolean succeeded) throws RemoteException { /// } } });
Andorid 8.0 Setting 模塊的源碼參考
源碼的緩存大小
import com.android.internal.util.Preconditions; import com.android.settings.utils.AsyncLoader; import com.android.settingslib.applications.StorageStatsSource; import com.android.settingslib.applications.StorageStatsSource.AppStorageStats; import java.io.IOException; /** * Fetches the storage stats using the StorageStatsManager for a given package and user tuple. */ public class FetchPackageStorageAsyncLoader extends AsyncLoader{ private static final String TAG = "FetchPackageStorage"; private final StorageStatsSource mSource; private final ApplicationInfo mInfo; private final UserHandle mUser; @Override public AppStorageStats loadInBackground() { AppStorageStats result = null; try { result = mSource.getStatsForPackage(mInfo.volumeUuid, mInfo.packageName, mUser); } catch (NameNotFoundException | IOException e) { Log.w(TAG, "Package may have been removed during query, failing gracefully", e); } return result; } ======================================================================================== package com.android.settings.applications; public class AppStorageSettings extends AppInfoWithHeader @Override public void onLoadFinished(Loader loader, AppStorageStats result) { mSizeController.setResult(result); updateUiWithSize(result); } private void updateUiWithSize(AppStorageStats result) { } else { long codeSize = result.getCodeBytes(); long cacheSize = result.getCacheBytes(); long dataSize = result.getDataBytes() - cacheSize;
源碼的清理緩存接口
mPm.deleteApplicationCacheFiles
package com.android.settings.applications; public class AppStorageSettings extends AppInfoWithHeader implements OnClickListener, Callbacks, DialogInterface.OnClickListener, LoaderManager.LoaderCallbacks{ private static final String TAG = AppStorageSettings.class.getSimpleName(); private ClearCacheObserver mClearCacheObserver; @Override public void onClick(View v) { // 清理緩存按鈕 if (v == mClearCacheButton) { if (mAppsControlDisallowedAdmin != null && !mAppsControlDisallowedBySystem) { RestrictedLockUtils.sendShowAdminSupportDetailsIntent( getActivity(), mAppsControlDisallowedAdmin); return; } else if (mClearCacheObserver == null) { // Lazy initialization of observer mClearCacheObserver = new ClearCacheObserver(); } mMetricsFeatureProvider.action(getContext(), MetricsEvent.ACTION_SETTINGS_CLEAR_APP_CACHE); // 清理緩存 mPm.deleteApplicationCacheFiles(mPackageName, mClearCacheObserver); class ClearCacheObserver extends IPackageDataObserver.Stub { public void onRemoveCompleted(final String packageName, final boolean succeeded) { final Message msg = mHandler.obtainMessage(MSG_CLEAR_CACHE); msg.arg1 = succeeded ? OP_SUCCESSFUL : OP_FAILED; mHandler.sendMessage(msg); } }
Android 7.0 的緩存大小接口
PackageManager mPm = mContext.getPackageManager(); mPm.getPackageSizeInfo(mPackageName, new IPackageStatsObserver.Stub() { @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { cacheTotalSize = pStats.cacheSize + pStats.externalCacheSize; } }
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。