在手机安装应用时,系统会自动在/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 839scrollview 中加入多个控件如 edittext 后会 ... -
android 布局式跑马灯,非TextView
2015-04-07 10:51 493如题,简单的实现了跑马灯效果,把Scroll.java放入an ... -
Android圆角图片
2015-03-11 17:44 692my_wane_shape.xml 快速圆角背景边框实现, ... -
SQLite多线程读写实践及常见问题总结
2015-02-13 17:06 941基本操作的部分,大家都很熟悉了,这里根据个人切身经验,总结了一 ... -
android加速度感应
2015-01-19 10:25 14711.android测量数据 (1)android设备坐标系 ... -
MatrixCursor的使用
2015-01-19 09:49 1043ContentProvider对外共享数据的时候的query( ... -
Android 获取控件的宽高高级用法(MeasureSpec)
2015-01-15 14:23 995一个MeasureSpec封装了父 ... -
Android_GridView_GridView概述及实现水平滑动
2015-01-14 17:14 11501.GridView简介 GridView是ViewGroup ... -
Android MMS,SMS之常用Uri
2014-09-19 16:32 1321Android MMS,SMS之常用Uri Android ... -
android短彩信查询以及MMS表结构
2014-09-19 16:31 2230android短信的数据库的Uri是不公开的, 读取起来时灰常 ... -
使用Android自带DownloadManager下载文件
2014-08-19 11:04 766SDK在API Level 9中加入了DownloadMan ... -
android textview里链接点击事件,增加图片
2014-08-07 16:45 1143Android系统默认给TextView插入图片提供了三种方 ... -
android Home事件汇总
2014-07-18 11:30 1001方法一:android 4.0以后无法通过更改页面的类型来 ... -
Android风格与主题(style and theme)
2014-07-16 16:35 670Android xml风格和主题文 ... -
Android中播放声音的两种方法
2014-05-30 15:09 667在Android中,音频、视 ... -
android 杀进程方法
2014-05-26 17:43 1005关闭应用的方法: 1.System.exit(0); ... -
android service 生命周期
2014-04-21 16:16 786有了 Service 类我们如何启动他呢,有两种方法: ... -
解决ADB端口被占用的问题
2014-04-21 16:14 830究其源就是adb server没启动 经过分析整理如下: ... -
输入法隐藏打开
2013-12-23 14:24 816首次进入activity,如果有个edittex ... -
google经纬度互转
2013-07-11 16:34 934https://developers.google.com/ ...
相关推荐
首先,我们可以看到路径"_storage_emulated_0_",这通常代表Android设备上的内部存储空间,模拟的SD卡(SD卡被系统映射到内部存储的一个部分)。"android_data"目录是Android应用程序数据存储的地方,而...
- `_storage_emulated_0_`:这部分表示的是Android设备的内部存储空间,通常在Android系统中,`storage/emulated/0` 对应于手机的主用户可访问的外部存储(即SD卡模拟的内部存储)。 2. **应用程序数据**: - `_...
文件存储是一种简单且常用的数据保存方法,尤其适用于需要持久化小量数据或非结构化数据的情况。本文将深入探讨Android中的文件存储数据,包括基本概念、存储路径、文件操作以及最佳实践。 ### 文件存储的基本概念 ...
在Android系统中,获取安装后的应用(APP)所占的空间大小是开发者或用户可能需要进行的一项常见操作。这包括了APK文件自身的大小、应用程序在运行时生成的缓存文件以及存储的数据。了解这些信息有助于优化应用性能...
在Android系统中,数据存储是应用开发的重要环节,而SDCard(Secure Digital Card)作为外部存储,为应用程序提供了大量存储空间。本节我们将深入探讨Android如何利用SDCard进行数据存储,以及相关的源代码分析。 ...
用户空间驱动允许应用程序直接与硬件交互,而内核空间驱动则在操作系统内核中运行,提供更高级别的抽象和管理。对于1302这样的RTC设备,一般会实现内核空间驱动,因为它需要与系统时钟管理紧密协作。 1302驱动的源...
Android设备通常有两种类型的存储空间:内部存储(Internal Storage)和外部存储(External Storage),通常所说的SD卡就是外部存储的一部分。在Android 6.0(API级别23)之后,对存储访问有了更严格的权限管理,...
4. **缓存管理**:为了防止缓存空间过大,需要定期清理无用的缓存文件,这可以通过实现自定义的缓存策略来实现,比如基于文件大小、访问时间等因素。 5. **检测并使用缓存**:在播放视频时,先检查本地是否存在对应...
在Android系统中,SD卡(通常称为外部存储)是用于扩展设备存储空间的重要部分,而文件的读写操作是应用程序日常功能的一部分。本案例聚焦于使用ES文件浏览器进行SD卡文件的操作,它是一款流行的Android文件管理应用...
Android为每个应用提供了私有文件存储空间,位于`/data/data/Package Name/files`目录。如果需要在SD卡上存储文件,需要额外的权限检查和路径处理。文件存储不适合跨应用共享数据。 示例代码: ```java ...
了解如何计算Android程序的缓存大小是优化应用性能、管理存储空间和提升用户体验的重要方面。以下将详细解释Android程序缓存的原理、计算方法以及相关知识点。 1. **缓存的基本概念** - 缓存是计算机科学中的一个...
在Android系统中,开发者往往需要了解自己或者用户安装的应用程序所占用的存储空间,以便进行优化或者提供相关信息。本文将详细讲解如何通过Android的`PackageManager`服务来获取应用程序的大小,以及背后的实现原理...
- Android/data/<package_name>/:应用私有的外部存储空间,可持久存储用户数据。 - Android/obb/<package_name>/:用于存放大型游戏或应用的扩展文件。 - DCIM/:相机拍摄的照片和视频通常存放于此。 - ...
总结来说,Android手机内存的分配涉及到硬件接口、内核、用户空间等多个层次,理解这些内存区域的划分和使用对于开发和调试Android应用程序、优化系统性能具有重要意义。同时,掌握查看和分析内存使用状态的工具和...
主要的外部存储空间分为内部存储和外部存储(即SD卡)。内部存储通常用于存储应用的数据和私有文件,而外部存储则供用户存放多媒体文件、文档等公共数据。 2. **文件浏览器的基本结构** 文件浏览应用的核心在于...
Android WIFI 架构和控制流程 Android WIFI 架构和控制流程是一个复杂的系统,涉及到多个组件和模块。本文将从 WIFI 的基本架构、WIFI 在 Android 中如何工作、配置 Android 支持 WIFI、使能 wpa_supplicant 调试...
在Android开发中,QQ空间(Qzone)分享是常见的社交功能之一,允许用户将应用程序内的内容,如文本、图片、链接等,分享到他们的QQ空间动态。本教程将深入讲解如何在Android应用中实现QQ空间的分享功能。 首先,...
通过对Android系统ROM的定制及精简,我们可以有效地提高设备的性能并节省存储空间。这一过程不仅需要对系统文件结构有深入的理解,还需要具备一定的技术背景,才能安全有效地完成。希望本文能够帮助读者更好地掌握这...
GDAL(Geospatial Data Abstraction Library)是一个开源的地理空间数据处理库,它支持多种地理空间文件格式的读取、写入和转换操作。这个压缩包包含了GDAL的不同版本库,适用于不同的操作系统平台,包括Windows...
首先,Android系统为每个应用程序提供了内置的缓存目录,位于内部存储器的`/data/data/<package_name>/cache`路径下。这个目录用于存储临时文件,当存储空间不足或系统需要清理时,这些文件可能会被删除。要获取这个...