在手机安装应用时,系统会自动在/data/data目录下面以应用的主包名创建一个目录,默认还会在最后的那个目录里面创建一个lib目录。下面看一下系统获取存储空间的代码:
来自android2.3.3系统源代码/packages/apps/Settings/src/com/android/settings/applications/ManageApplications.java
531.mDataFileStats = new StatFs("/data");
532.mSDCardFileStats = new StatFs(Environment.getExternalStorageDirectory().toString());
<pre name="code" class="java">748.mDataFileStats.restat("/data");
try {
totalStorage = (long)mDataFileStats.getBlockCount() *
mDataFileStats.getBlockSize();
freeStorage = (long) mDataFileStats.getAvailableBlocks() *
mDataFileStats.getBlockSize();
} catch (IllegalArgumentException e) {
}
final int N = mApplicationsAdapter.getCount();
for (int i=0; i<N; i++) {
ApplicationsState.AppEntry ae = mApplicationsAdapter.getAppEntry(i);
appStorage += ae.codeSize + ae.dataSize;
}
freeStorage += mApplicationsState.sumCacheSizes();<pre name="code" class="java"><pre>
734.mSDCardFileStats.restat(Environment.getExternalStorageDirectory().toString());
try {
totalStorage = (long)mSDCardFileStats.getBlockCount() * mSDCardFileStats.getBlockSize();
freeStorage = (long) mSDCardFileStats.getAvailableBlocks() * mSDCardFileStats.getBlockSize();
} catch (IllegalArgumentException e) {
// use the old value of mFreeMem
}
第531行代码是/data目录下面的空间,第532行是检查SD卡的空间。
“存储空间不足”data过小的通知分析DeviceStorageMonitorService类
位置
DeviceStorageMonitorService.java (frameworks\base\services\java\com\android\server\)
一. 三个关键变量:
private static final int DEFAULT_THRESHOLD_PERCENTAGE = 10; private static final int DEFAULT_FULL_THRESHOLD_BYTES = 1*1024*1024; // 1MB private static final long DEFAULT_DISK_FREE_CHANGE_REPORTING_THRESHOLD = 2 * 1024 * 1024; // 2MB
二. 参数调用的地方
在整个android目录中, 三个常量被调用的地方, 都只是在DeviceStorageMonitorService.java中
DEFAULT_THRESHOLD_PERCENTAGE(10) : private long getMemThreshold(); return 1300234 * 10 = 13,002,340 DEFAULT_FULL_THRESHOLD_BYTES(10M) : private int getMemFullThreshold() return 10,485,760 DEFAULT_DISK_FREE_CHANGE_REPORTING_THRESHOLD(5M=5,242,880) : private final void restatDataDir(); threshold = 5,242,880 delta = mFreeMem = 101,482,696
三. 函数被调用的地方
DeviceStorageMonitorService构造中
private long mMemLowThreshold = getMemThreshold();
四. DeviceStorageMonitorService的调用追踪
private final void checkMemory(boolean checkCache) -> 判断() -> private final void sendNotification()
在sendNotification()中将剩余内存的值存入intent中, 然后广播出去, 广播类型为ACTION_MANAGE_PACKAGE_STORAGE
此通知的标题为 “存储空间不足(Low on space)”
通知的内容为 “手机内存空间所剩不多了(Phone storage space is getting low)”
五. DEFAULT_FULL_THRESHOLD_BYTES的调用追踪
private final void checkMemory(boolean checkCache) -> 判断() -> private final void sendFullNotification() -> sendStickyBroadcast(intent.ACTION_DEVICE_STORAGE_FULL)
若data目录小于DEFAULT_FULL_THRESHOLD_BYTES, 则不在接收短信.
六. DEFAULT_DISK_FREE_CHANGE_REPORTING_THRESHOLD 调用追踪
private final void checkMemory(boolean checkCache) -> EventLog.writeEvent(EventLogTags.FREE_STORAGE_CHANGED, mFreeMem)
经过jwisp烧录到真机上发现, 真正有可能有用的是百分比报警, 那只需要设置下面这个参数即可:
DEFAULT_THRESHOLD_PERCENTAGE
发表评论
-
ScrollView嵌套Edittext
2015-04-08 18:26 799scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 454如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 651my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 908基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
android加速度感应
2015-01-19 10:25 14381.android测量数据 (1)android设备坐标系 ... -
MatrixCursor的使用
2015-01-19 09:49 1015ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 943一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11251.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1298Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2113android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 738SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1105Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 971方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 642Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 615在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 977关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 744有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 789究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 775首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 900https://developers.google.com/ ...
相关推荐
如果你想摆脱缓存目录使用的尴尬:找不到目录?忘记申请读写权限?害怕污染用户存储空间?……请往下看 SD卡缓存目录 当应用需要将图片或者文件缓存到SD...// /storage/emulated/0/Android/data/app_package_name/cach
用于填充android空间的脚本,效率很高,可以达到存储写入的理论值,emmc填充速度都可以达到240MB/S,确认是大M。 用法: adb push fillbigfile.sh /data/local/tmp adb shell sh /data/local/tmp/fillbigfile.sh /...
方法可以获得当前的手机自带的存储空间中的当前包文件的路径 getFileDir() —– /data/data/cn.xxx.xxx(当前包)/files getCacheDir() —– /data/data/cn.xxx.xxx(当前包)/cache 1. 编写文件读取与写入功能实现类...
可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板...
在Android中,你为某个应用程序创建的数据库,只有它可以访问,其它应用程序是不能访问的,数据库位于Android设备/data/data//databases文件夹中,在这篇文章中,你将会学习到如何在Android中创建和使用数据库。...
----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 2 开放手机联盟 --Open --Open --Open --Open Handset Handset Handset Handset Alliance ...
后来想直接计算/data/app和/system/app里面的apk大小,可是有时候会碰到权限问题,需要root才可以获取大小。 再后来,我想起系统的设置里面有一个应用程序管理,它里面列出了所有程序的占用空间大小、数据大小和...
也适用于有根的 Android 手机。 它处于测试阶段,因此仅当 (1) 您了解将存在错误 (2) 您准备报告完整错误报告时才使用(理想情况下,使用 bin/script 或 GooglePlay 的“终端 IDE”捕获完整的 shell 会话) , 文本...
一、基本概念 在Android应用中保存文件,保存的位置有两处 ①手机自带的存储空间,较小(如200M),适合保存一些小文件,Android中保存位置在data/data/应用包名/files目录 ②外存储设备如SD卡,较大,适合保存大文件...
SmartQV3超精简rom开机剩余直逼100...这下可以放心删除ndda里面的data(官方程序问题,没链接data/data),同时/app.bak的要么删除要么移动到/ndda/data吧 另外一个d~~~.bak文件夹删掉。 温馨提示,本rom不提供蓝牙服务
一般的Android App能读取的存储空间主要有三种: app自己的私有目录,也就是/data/data/《app 目录》。 读写这个目录不需要单独的权限。每个app只能读写自己的目录,而不能读写其他app的目录。 Android通过Seandroid...
假如你用ANDROID手机,软件一般是安装在手机上,随着你安装软件增多,手机空间越来越少,怎么办?DATA2SD,最新技术出现了。
Android手机存储分为两个部分:内部存储和外部存储,内部存储一般是手机自带的存储空间,外部存储指外插SD卡提供的存储空间;随着手机发展,这两个存储的定义又有了一些些变化,新的手机不再有外插SD卡的概念,...
主要是一些android基础代码,第一次学android,由于其他原因需要暂时放一下android,所以...主要是用于访问android中的文件空间使用情况和所有应用程序占用的空间大小(code、data、cache),listview的简单绑定使用。
一款能让 android 1.6系统的用户将应用程序移动到的SD卡上,需要 root 权限支持,其实就是 Link2SD 挂载的 ext2 为/ data/sdext2 你的SD卡分区,使系统在开机时挂载它,实现移动程序功能! 功能特点: ■创建和删除...
Link2SD是一款能让android 1.6系统以上的用户将应用程序移动到的SD卡上,需要root权限支持,其实就是Link2SD挂载的ext2为/data/sdext2你的SD卡分区,使android系统在开机时挂载它,实现移动程序功能!是款不错的小...
Link2SD是一款能让android 1.6系统的用户将应用程序移动到的SD卡上,需要root权限支持,其实就是Link2SD挂载的ext2为/ data/sdext2你的SD卡分区,使android系统在开机时挂载它,实现移动程序功能!最新版本,分享给G...