Android简易实战教程--第十二话《代码获取手机总运行内存的大小》
手机RAM存储,类似于电脑的内存。这一篇,对通过代码获取手机总内存大小做详细介绍。
首先,定义一个engine类,这个类功能就是获取进程信息,包括运行的程序个数,系统总内存,系统剩余总内存。本篇先完成获取总内存。
代码如下:
public class TaskManagerEngine {
//获取总内存大小
public static long getTotalMemorySize(Context context){
long size = 0;
//获取ActivityManager管理,要获取【运行相关】的信息,与运行相关的信息有关
ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
MemoryInfo outInfo = new MemoryInfo();//outInfo对象里面包含了内存相关的信息
activityManager.getMemoryInfo(outInfo);//把内存相关的信息传递到outInfo里面C++思想
size = outInfo.totalMem;
//通过读取配置文件方式获取总内大小。文件目录:/proc/meminfo
return size;
}
}
其实如果是获取剩余内存;把size=outinfo.totalMem改为size=outinfo.avaliMem就可以了。而且不会报错。但是,但是上边的程序会报错,原因在于,只支持api16级别以上手机。显然这样对于低版本用户是不可行的。那么久另辟蹊径,另一种方式获取手机总内存大小——文件获取。该文件是proc目录
对于文件获取,首先通过inux指令,看那个文件有内存的详细信息
linux指令如下:
cd /proc
ls 进入该目录
ls -l查看详细信息
cat cupinfo 查看cpuinfo里面的详细信息
cat meminfo 查看meminfo内存详细信息
详细信息截图如下:
第一行位置,就是系统中总内存的大小。根据这个文件信息,可以获取到总内存大小了。方式如下:
public class TaskManagerEngine {
//获取总内存大小
public static long getTotalMemorySize(Context context){
long size = 0;
//通过读取配置文件方式获取总内大小。文件目录:/proc/meminfo
File file = new File("/proc/meminfo");
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
//根据命令行可以知道,系统总内存大小位于第一行
String totalMemarysizeStr = reader.readLine();//MemTotal: 513744 kB
//要获取大小,对字符串截取
int startIndex = totalMemarysizeStr.indexOf(':');
int endIndex = totalMemarysizeStr.indexOf('k');
//截取
totalMemarysizeStr = totalMemarysizeStr.substring(startIndex + 1, endIndex).trim();
//转为long类型,得到数据单位是kb
size = Long.parseLong(totalMemarysizeStr);
//转为以byte为单位
size *= 1024;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return size;
}
}
这样返回的大小就是手机运行内存的大小了。单元测试得到数据:526073856
Android简易实战教程--第十二话《代码获取手机总运行内存的大小》的更多相关文章
- Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》
如果想要获取系统手机应用的详细信息,那么下边代码可以直接作为模板使用.笔者对每一行代码都做了注解,供您参考.直接上代码: package com.example.itydl.engines; impo ...
- Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》
转载此文章请注明出处:点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...
- Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》
之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...
- Android简易实战教程--第二十九话《创建图片副本》
承接第二十八话加载大图片,本篇介绍如何创建一个图片的副本. 安卓中加载的原图是无法对其修改的,因为默认权限是只读的.但是通过创建副本,就可以对其做一些修改,绘制等了. 首先创建一个简单的布局.一个放原 ...
- Android简易实战教程--第二十八话《加载大图片》
Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出.假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃.这种异常是无法捕获的 内存不足并不 ...
- Android简易实战教程--第二十五话《网络图片查看器》
访问网络已经有了很成熟的框架.这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的"注意点".这一篇可以复习或者学习HttpURLConnection.han ...
- Android简易实战教程--第二十话《通过广播接收者,对拨打电话外加ip号》
没睡着觉,起来更篇文章吧哈哈!首先祝贺李宗伟击败我丹,虽然我是支持我丹的,但是他也不容易哈哈,值得尊敬的人!切入正题:这一篇来介绍个自定义广播接收者. 通常我们在外拨电话的时候,一般为使用网络电话.如 ...
- Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
本篇接第二十五话 点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52389856 上一篇已经把王略中的图片获取到了.生活中有这么 ...
- Android简易实战教程--第十五话《在外部存储中读写文件》
第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意 ...
随机推荐
- ●BZOJ 3963 [WF2011]MachineWorks
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3963 题解: 斜率优化DP,CDQ分治. 先按时间排序.(规定以下内容的第i台机器的卖出时间 ...
- hdu 5011(博弈)
题意:在许多堆石子中,两人轮流取,1.在一堆中取至少一个 2.将这一堆分成两堆 思路:NIM游戏,所有值的异或,当其为0时失败 nim游戏: 假设只有两堆,游戏人取得胜利并不在于N1和N2的值具体是 ...
- 使用jquery.qrcode.js生成二维码
通常生成二维码的方式有两种:第一种是java代码的形式,第二种是通过Js方式. 在这里我做个记录,用js生成二维码,可以在官网下载源码:http://jeromeetienne.github.io/j ...
- codeblocks设置背景主题
一. 首先进入codeblocks官网找到colour theme代码. codeblocks官网代码地址:http://wiki.codeblocks.org/index.php?title=Syn ...
- 获取X天后的日期
import java.util.Calendar; import java.util.Date; public class main { public static void main(String ...
- 原生js之canvas时钟组件
canvas一直是前端开发中不可或缺的一种用来绘制图形的标签元素,比如压缩上传的图片.比如刮刮卡.比如制作海报.图表插件等,很多人在面试的过程中也会被问到有没有接触过canvas图形绘制. 定义 ca ...
- c++ 隐藏
子类中写了一个与从父类中继承下来的方法名同名的方法 子类对象.方法(); //调用子类中定义的方法 父类对象.方法(); / ...
- OpenCV3.1.0中调用MHI(Motion History Images, 运动历史图像)
写在前边: OpenCV3.0+要想使用MHI,就要现安装扩展模块opencv_contrib.安装方法见:ubuntu 14.04 64位 安装Opencv3.1.0 (包含opencv_contr ...
- Rstudio-server 重新登录载入session的问题
Rstudio-server 非常好用,但是免费版的也有一些问题,一个是只能支持在一个客户端的登录,另一个就是每次登录都要导入之前session的问题,对于第二个问题的解决方案,我们可以进入到~/.r ...
- Java中Semaphore(信号量)的使用
Semaphore的作用: 在java中,使用了synchronized关键字和Lock锁实现了资源的并发访问控制,在同一时间只允许唯一了线程进入临界区访问资源(读锁除外),这样子控制的主要目的是为了 ...