編輯:關於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性能優化
Google 發布的15個 Android 性能優化典范,android性能優化 2015年伊始,Google發布了關於Android性能優化典范的專題,一共16個短視頻
Android 應用程序集成Google 登錄,androidgoogle
Android 應用程序集成Google 登錄,androidgoogle谷歌登錄API: https://developers.google.com/ide
Android應用安全開發之淺談網頁打開APP,androidapp
Android應用安全開發之淺談網頁打開APP,androidapp一、網頁打開APP簡介 Android有一個特性,可以通過點擊網頁內的某個鏈接打開APP,或者在其他A
安卓第十七天筆記--簡易版本音樂播放器,安卓第十七天
安卓第十七天筆記--簡易版本音樂播放器,安卓第十七天 title:簡易版本音樂播放器 簡易版本音樂播放器 1.布局 <?xml version=1.0 enco