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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。