软件编程
位置:首页>> 软件编程>> Android编程>> Android 8.0的缓存大小和缓存清理接口方法

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
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com