Android清理緩衝功能實現

來源:互聯網
上載者:User

標籤:android   緩衝   設定   java   

我們都知道在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;@Overrideprotected 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() {@Overridepublic 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

Android清理緩衝功能實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.