Android--获取apk大小
//获取apk大小
public static String getPkgSize(final Context context, String pkgName) throws NoSuchMethodException,
InvocationTargetException, IllegalAccessException {
// getPackageSizeInfo是PackageManager中的一个private方法,所以需要通过反射的机制来调用
Method method = PackageManager.class.getMethod("getPackageSizeInfo",
String.class, IPackageStatsObserver.class);
// 调用 getPackageSizeInfo 方法,需要两个参数:1、需要检测的应用包名;2、回调
method.invoke(context.getPackageManager(), pkgName,
new IPackageStatsObserver.Stub() {
@Override
public void onGetStatsCompleted(PackageStats pStats, boolean succeeded) throws RemoteException {
// 子线程中默认无法处理消息循环,自然也就不能显示Toast,所以需要手动Looper一下
Looper.prepare();
// 从pStats中提取各个所需数据
// Toast.makeText(context, "缓存大小=" + Formatter.formatFileSize(context, pStats.cacheSize) +
// "\n数据大小=" + Formatter.formatFileSize(context, pStats.dataSize) +
// "\n程序大小=" + Formatter.formatFileSize(context, pStats.codeSize),
// Toast.LENGTH_LONG).show();
// 遍历一次消息队列,弹出Toast
long totalsize1 = pStats.cacheSize + pStats.dataSize + pStats.codeSize;
DecimalFormat df=new DecimalFormat("0.00");
totalsize = df.format(Double.valueOf(totalsize1 /1024/ 1024D));
Looper.loop();
}
});
return totalsize;
}
添加权限:
<uses-permission android:name="android.permission.GET_PACKAGE_SIZE"/>
目录结构为上图:
1、创建包:android.content.pm
2、创建两个AIDL文件IPackageStatsObserver.aidl 、PackageStats.aidl
AIDL下载地址:https://download.csdn.net/download/chaoyu168/10636731

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
序列化Parcelable和Serializable的区别
Parcelable和Serializable有什么用,它们有什么差别? Parcelable和Serializable都可以实现序列化,使对象可以变为二进制流在内存中传输数据。在Android中,只要实现二者之一就可以使用Intent和Binder来传递数据。实现了Parcelable接囗的类依赖于Parcel这个类来实现数据传递,它并不是一个一般化用途的序列化机制,主要用于IPC机制下的高性能传输。 差别 来源上 Parcelable是Android提供的序列化接口,Serializable是Java提供的序列化接口。因此Parcelable只能在Android中使用,而Serializable可以在任何使用Java语言的地方使用。 使用上 Parcelable使用起来比较麻烦,序列化过程需要实现Parcelable的writeToParcel(Parcel dest, int f1ags)方法和describeContents()方法。其中describeContents()方法直接返回0就可以了。为了反序列化,还需要提供一个非空的名为CREATOR的静态字段,该字段类型是实现了...
-
下一篇
iOS实现Crash捕获与堆栈符号化
在应用程序开发过程中,最棘手的问题莫过于crash。已经上线的crash无法看到崩溃现场,只能通过crash日志进行定位分析。通常情况下,可以使用苹果自带的crash log或者第三方的crash组件进行crash捕获。但是在一些场景下,需要我们手动实现crash捕获与符号化,比如开发SDK。 Crash捕获 iOS端的crash分为两类,一类是NSException异常,另外一类是Signal信号异常。这两类异常我们都可以通过注册相关函数来捕获,但是值得注意的是一个应用中如果注册了多个crash收集组件,必然会存在冲突问题。这个时候,我们需要在注册之前判断是否已经注册过handler,如果有注册过,需要把之前注册的handler函数指针保存,待处理完crash后,再把对应的handler抛出去。 1. NSException异常捕获 N
相关文章
文章评论
共有0条评论来说两句吧...