編輯:關於android開發
清除data,清除cache,其實在Android原生Setting裡面有這個功能的。
需求是把這個功能做到自己的App裡面,並計算出cache和data的size。
所以參考了一下Setting的源碼。看如何實現該功能:
首先需要寫兩個aidl去調用系統的清除以及獲取size功能:
IPackageStatsObserver.aidl -- 獲取data以及cache的size
/* ** ** 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); }
IPackageDataObserver.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; /** * 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 IPackageDataObserver { void onRemoveCompleted(in String packageName, boolean succeeded); }
然後Java代碼實現:
private Handler handler=new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case Constant.Hanler.MSG_GET_DATASIZE: String size=Formatter.formatFileSize(AppDetialActivity.this, catcheSize); tv_catcheSize.setText(size); break; case Constant.Hanler.MSG_CLEAR_DATA_SUCCESS: String pkgname=(String) msg.obj; getSize(pkgname); break; default: break; } }; };
通過包名清除數據
private ClearUserDataObserver mClearDataObserver; private void clearData(String packagename){ if (mClearDataObserver == null) { mClearDataObserver = new ClearUserDataObserver(); } ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); boolean res = am.clearApplicationUserData(packageName, mClearDataObserver); if (!res) { // Clearing data failed for some obscure reason. Just log error for now Log.i(TAG, "Couldnt clear application user data for package:" + packageName); showToast("Clear failed"); } else { } }
清除完成回調
class ClearUserDataObserver extends IPackageDataObserver.Stub { public void onRemoveCompleted(final String packageName, final boolean succeeded) { Logger.d(TAG, "packageName "+packageName +" succeeded "+succeeded); if(succeeded){ Message msg=Message.obtain(); msg.what=Constant.Hanler.MSG_CLEAR_DATA_SUCCESS; msg.obj=packageName; handler.sendMessage(msg); } } }
獲取data,cache文件size
private void getSize(String packageName) { if (!Util.isNullStr(packageName)) { PackageManager pManager = getPackageManager(); pManager.getPackageSizeInfo(packageName, statsObserver); } } IPackageStatsObserver statsObserver = new IPackageStatsObserver.Stub() { @Override public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException { // TODO Auto-generated method stub catcheSize = pStats.dataSize; handler.sendEmptyMessage(Constant.Hanler.MSG_GET_DATASIZE); } };
到此就OK~~~~~~~~
Google 發布的15個 Android 性能優化典范,android性能優化 2015年伊始,Google發布了關於Android性能優化典范的專題,一共16個短視頻
Android 應用程序集成Google 登錄,androidgoogle谷歌登錄API: https://developers.google.com/ide
Android應用安全開發之淺談網頁打開APP,androidapp一、網頁打開APP簡介 Android有一個特性,可以通過點擊網頁內的某個鏈接打開APP,或者在其他A
安卓第十七天筆記--簡易版本音樂播放器,安卓第十七天 title:簡易版本音樂播放器 簡易版本音樂播放器 1.布局 <?xml version=1.0 enco