• Android清除缓存功能来实现


    我们都知道在Android的设置->应用程序中能够查看应用程序的相关信息,当中有一个功能是清除缓存。

    如图:


    怎么实现这些功能呢,从Android的setting源代码中能够得到相关信息。

    实现例如以下:

    Java代码:

    package com.wang.clearcache;
    
    import java.lang.reflect.Method;
    import android.os.Bundle;
    import android.os.RemoteException;
    import android.app.Activity;
    import android.content.pm.IPackageStatsObserver;
    import android.content.pm.PackageManager;
    import android.content.pm.PackageStats;
    
    public class MainActivity extends Activity {
    
    	private PackageManager pm;
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.activity_main);
    		
    		
    		pm = getPackageManager();
    		//反射
    		try {
    			Method method = PackageManager.class.getMethod("getPackageSizeInfo", new Class[]{String.class,IPackageStatsObserver.class});
    			method.invoke(pm, new Object[]{"com.wang.clearcache",new IPackageStatsObserver.Stub() {
    				
    				@Override
    				public void onGetStatsCompleted(PackageStats pStats, boolean succeeded)
    						throws RemoteException 
    				{
    					long cachesize = pStats.cacheSize;
    					long codesize = pStats.codeSize;
    					long datasize = pStats.dataSize;
    					System.out.println("cachesize:"+ cachesize);
    					System.out.println("codesize:"+ codesize);
    					System.out.println("datasize"+ datasize);
    				}
    			}});
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		
    	}
    }
    

    由于得到缓存信息须要增加android.permission.GET_PACKAGE_SIZE的权限

    Androidmainifest.xml

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.wang.clearcache"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="8"
            android:targetSdkVersion="17" />
        <uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
    
        <application
            android:allowBackup="true"
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name"
            android:theme="@style/AppTheme" >
            <activity
                android:name="com.wang.clearcache.MainActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    
    </manifest>
    </pre><pre name="code" class="java">
    由于使用在代码中使用了PackageManager的getPackageSizeInfo这个函数。可是这种方法是不正确外公开的函数,全部我们须要使用发射来调用这个函数,在该方法的内部回调了onGetStatsCompleted(PackageStats pStats, boolean succeeded)这种方法,通过该方法的pStats參数能够得到应用的缓存,数据缓存,代码容量缓存,在使用的过程中须要用到系统的aidl文件

    IPackageStatsObserver:

    /*
    **
    ** Copyright 2007, The Android Open Source Project
    **
    ** Licensed under the Apache License, Version 2.0 (the "License");
    ** you may not use this file except in compliance with the License.
    ** You may obtain a copy of the License at
    **
    **     http://www.apache.org/licenses/LICENSE-2.0
    **
    ** Unless required by applicable law or agreed to in writing, software
    ** distributed under the License is distributed on an "AS IS" BASIS,
    ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    ** See the License for the specific language governing permissions and
    ** limitations under the License.
    */
    
    package android.content.pm;
    
    import android.content.pm.PackageStats;
    /**
     * API for package data change related callbacks from the Package Manager.
     * Some usage scenarios include deletion of cache directory, generate
     * statistics related to code, data, cache usage(TODO)
     * {@hide}
     */
    oneway interface IPackageStatsObserver {
        
        void onGetStatsCompleted(in PackageStats pStats, boolean succeeded);
    }
    

    PackageStats:

    /* //device/java/android/android/view/WindowManager.aidl
    **
    ** Copyright 2007, The Android Open Source Project
    **
    ** Licensed under the Apache License, Version 2.0 (the "License"); 
    ** you may not use this file except in compliance with the License. 
    ** You may obtain a copy of the License at 
    **
    **     http://www.apache.org/licenses/LICENSE-2.0 
    **
    ** Unless required by applicable law or agreed to in writing, software 
    ** distributed under the License is distributed on an "AS IS" BASIS, 
    ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    ** See the License for the specific language governing permissions and 
    ** limitations under the License.
    */
    
    package android.content.pm;
    
    parcelable PackageStats;
    


    最后执行的结果:

    源代码地址下载:

    http://download.csdn.net/detail/wangbiaohome/8026535

    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    springboot整合shiro
    四大作用域:application,session,request,page
    Application作用域实现:当用户重复登录时,挤掉原来的用户
    从Linux下载大于4G文件到本地,并且在本地合并
    idea+maven+springboot+mybatis
    Spring 3.0 中一般 普通类调用service
    java微信扫码支付Native(模式二)
    阿里云不支持stmp 的25端口,必须
    python写入文本报错TypeError: expected a string or other character buffer object
    mysql找到数据的存储位置
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/4677480.html
Copyright © 2020-2023  润新知