Android 8.0的缓存大小和缓存清理接口方法
作者:法迪 发布时间:2023-11-09 16:47:06
标签:Android,8.0,缓存,接口
获取缓存大小接口
主要这里的方法已经和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<AppStorageStats> {
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<AppStorageStats> 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<AppStorageStats> {
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;
}
}
来源:https://blog.csdn.net/su749520/article/details/78914460
0
投稿
猜你喜欢
- 一、前言1、简单的登录验证可以通过Session或者Cookie实现。2、每次登录的时候都要进数据库校验下账户名和密码,只是加了cookie
- 前两年写的东西,现在整理一下发出来!以前公司需要做WebService,并且对WebService的SoapHeader进行加密,所以就写了
- 在日常的开发中、我们都知道,Java的内存清理是通过垃圾回收器进行的,那么其是如何将没用的对象被被清理掉的呢?Java 语言的内存自动回收称
- 这是一篇入门级文章,高手请略过。在这篇文章中我们将学习如何用 Java 对图像进行剪裁并将剪裁出来的部分单独保存到文件中。我们将通过以下步骤
- 标准函数with与run和apply with函数with函数接收两个参数:第一个参数可以是任意类型的对象,第二个参数是一个Lambda表达
- 引言本文是关于Spark优化性能与内存使用的最佳实践,翻译整理自Tuning - Spark 3.3.2 Documentation。由于s
- 1.<constant name="struts.i18n.encoding" value="UTF-8
- 自然排序TreeSet集合在存储数据时有一定的顺序,它会将一些数据进行比较,比较调用的是comparaTo()方法,该方法是在Compara
- 这篇文章主要介绍了SpringBoot以war包形式部署到外部Tomcat过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有
- 任务,基于线程池。其使我们对并行编程变得更简单,且不用关心底层是怎么实现的。System.Threading.Tasks.Task类是Tas
- springboot读取文件,打成jar包后访问不到最新开发出现一种情况,springboot打成jar包后读取不到文件,原因是打包之后,文
- 前言说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少。有不少人
- 本文实例展示了WinForm项目开发中NPOI用法,对于C#初学者有一定的借鉴价值。具体实例如下:private void ExportMe
- 局限性只支持MP4文件经过尝试对于一些MP4文件分割不了依赖<!-- mp4文件操作jar --><!-- https:/
- 根据约定,在使用java编程的时候应尽可能的使用现有的类库,当然你也可以自己编写一个排序的方法,或者框架,但是有几个人能写得比JDK里的还要
- 本文实例讲述了Java Lambda表达式。分享给大家供大家参考,具体如下:一 点睛Lambda表达式支持将代码块作为方法参数,Lambda
- 1.MyBatisX插件在使用mybatis或者mybatis-plus时,我们可以安装IDEA的MyBatis的插件 - MyBatisX
- 今天来学习总结一下,Android 后添加的一些新的组件和UI效果,Material Dialog,SwipeRefreshLayout,L
- 本文详细总结了Android编程开发之性能优化技巧。分享给大家供大家参考,具体如下:1.http用gzip压缩,设置连接超时时间和响应超时时
- Volatile关键字的作用主要有如下两个:1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。2. 顺序一致性