博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android8.0的缓存大小和缓存清理接口
阅读量:4146 次
发布时间:2019-05-25

本文共 5105 字,大约阅读时间需要 17 分钟。

获取缓存大小接口

主要这里的方法已经和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;        }    }

转载地址:http://excti.baihongyu.com/

你可能感兴趣的文章
synchronized与Lock
查看>>
数据库索引
查看>>
实现包含min,max,push,pop函数的栈
查看>>
实验2-6 字符型数据的输入输出
查看>>
实验3-5 编程初步
查看>>
实验4-1 逻辑量的编码和关系操作符
查看>>
实验5-2 for循环结构
查看>>
实验5-3 break语句和continue语句
查看>>
实验5-4 循环的嵌套
查看>>
实验5-5 循环的合并
查看>>
实验5-6 do-while循环结构
查看>>
实验5-7 程序调试入门
查看>>
实验5-8 综合练习
查看>>
第2章实验补充C语言中如何计算补码
查看>>
深入入门正则表达式(java) - 命名捕获
查看>>
使用bash解析xml
查看>>
android系统提供的常用命令行工具
查看>>
【Python基础1】变量和字符串定义
查看>>
【Python基础2】python字符串方法及格式设置
查看>>
【Python】random生成随机数
查看>>