在安卓虚拟机中使用变量,主要是为了实现程序的逻辑控制和数据传递。通过在虚拟机中使用变量,我们可以将一些特定的数据存储在内存中,从而实现程序的状态管理和交互。
以下是在安卓虚拟机中使用变量的一些例子:
1 在界面控制中:我们可以使用变量来存储用户界面控件的状态,如按钮的点击状态、文本框的输入内容等。这样,我们可以在代码中方便地读取和修改这些状态,从而实现界面的交互功能。
2 在数据存储中:我们可以使用变量来存储需要在程序中共享的数据,如游戏的得分、计时器的时间等。这样,在多个组件或线程之间,我们可以轻松地访问和修改这些数据。
3 在事件处理中:我们可以使用变量来存储事件的状态,如用户的输入、网络请求的状态等。通过变量,我们可以方便地对事件进行状态管理,以便在代码中实现相应的处理逻辑。
总之,在安卓虚拟机中使用变量可以帮助我们实现程序的逻辑控制和数据传递,提高程序的可读性和可维护性。
Environment
常用方法:
Java代码:
1方法:getDataDirectory()
2解释:返回File ,获取Android 数据目录。
3方法:getDownloadCacheDirectory()
4解释:返回File ,获取Android 下载/缓存内容目录。
5方法:getExternalStorageDirectory()
6解释:返回File ,获取外部存储目录即SDCard
7方法:getExternalStoragePublicDirectory(String type)
8解释:返回
File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件
9方法:getExternalStorageState()
10解释:返回File ,获取外部存储设备的当前状态
11方法:getRootDirectory()
12解释:返回File ,获取Android 的根目录
在前台找到这个控件,
EditText text=thisfindViewByID("EditText名称");
text就是现在找到的这个控件,获取它的值,
string str=textgetText();
double doubleStr=DoubleValueOf(str);
手写的,好想是这样,好久不高安卓了,你再找找资料吧,呵呵
内容整理自网络。
在做内存优化的时候,我们发现除了解决内存泄露问题,剩下的就只有想办法减少真实的内存占用。而在App中,大部分内存可能被我们占用了,所以减少的内存占用可以带来直接的效果。本文就简单介绍一张到底占用多少内存,我们先假设我们有一张时 600 800 的,占用空间大小假设是 100KB。
内存大小跟占用空间大小有什么关系?
占用空间的大小不是占用内存的大小,一些初学者可能会误解一下。占用空间是在磁盘上占用的空间,内存大小是加载到内存中占用的内存大小。两个只是单位是一样的,本质不是一个概念。
一张到底占用多少内存呢?(ARGB_8888编码)
1 占用内存的计算公式: 高度 宽度 一个像素占用的内存大小
2 所以上面的占用内存是:800 600 4 byte = 1875KB = 183M
上面的计算公式中,为什么是4byte呢?文章后面有总结哦
所在目录对内存的影响?
在Android中,的存放目录和手机的屏幕密度影响最终的大小,举个例子:
假设我们的放到 xhdpi 目录下,那么我们本文中的占用的内存大小如下:
屏幕密度为2的设备:800 600 4byte = 183M
屏幕密度为3的设备:800 15 600 15 4byte = 183 225M = 412M
所以,计算占用内存大小的时候,要考虑所在的目录跟设备密度,这两个因素其实影响的是的高宽,android会对进行拉升跟压缩。
总结
1 确实很占用内存,内存优化先考虑内存占用;
2 一定要避免使用大,这就是9图很有用的原因之一;
3 的大小对内存的影响是正比关系;
4 本文只是简单的告知读者怎么计算的内存大小。
大图: 440 336 小图: 220 168 资源目录: xhdpi
小图的高宽都是大图的1/2-->小图是原图的1/4
界面效果:
测试设备: Coolpad 8676-M01 51 density=20
测试前准备 *** 作: 同一款设备,设置前后多次调用gc直到内存短时间内保持稳定不再变化
内存使用情况: 下图依次是 初始内存,大图内存,小图内存
大图占用内存: 1123 MB - 1066 MB = 057 MB
小图占用内存: 1081 MB - 1066 MB = 015 MB
大图小图内存关系: 015 MB 4 = 060 MB 约等于 057 MB (这是统计工具的误差,理论上就是相等的)
同样的方式在另外一台设备小米4c上得到的结果如下:
测试设备: Xiaomi Mi-4c V8210LXKCNDL 511 density=30
大图占用内存: 1322 MB - 1195 MB = 127 MB
小图占用内存: 1227 MB - 1195 MB = 032 MB
大图小图内存关系: 032 MB 4 = 128 MB 约等于 127 MB
结论: 由此可见大图比小图占用更多的内存,大小(分辨率)与占用内存成正比关系
备注: 在硬盘上占用的磁盘空间大小,与在内存中占用的内存大小完全不一样,不是一个概念,不要混淆
根据上文中大小与内存的关系,可以更加深刻的理解Android中9的作用,它不但能减少apk的体积,还能减少占用内存。
有些时候我们根本不需要,而是自己绘制背景,可以在自定义View的onDraw中绘制背景,当然最方便的还是使用系统的Drawable,绘制部分交给系统去完成。
下面测试与Drawable的内存占用对比
原始大小: 482 482
界面效果:
测试设备: Xiaomi Mi-4c V8210LXKCNDL 511
测试前准备 *** 作: 同一款设备,设置背景前后多次调用gc直到内存短时间内保持稳定不再变化
内存使用情况: 下图依次是 初始内存,使用占用的内存,使用Drawable占用的内存,使用onDraw绘制占用的内存
使用占用内存: 1397 MB - 1197 MB = 200 MB
使用Drawable占用内存: 1197 MB - 1197 MB = 000 MB (不会是0,有误差,只是很少)
使用onDraw绘制占用内存: 1198 MB - 1197 MB = 001 MB
结论: 绘制背景,或者使用系统提供Drawable作为背景,会大大减少内存占用
Drawable 参考资料:
Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android GradientDrawable(shape标签定义)静态使用和动态使用(圆角,渐变实现)
“让你的最小化”一节中描述的方法:使用尽可能小的图,使用9,自己绘制背景或者使用Drawable来绘制背景
加载大时需要对进行压缩,使用等比例压缩方法直接在内存中处理
这样做要注意的是,质量会变差,inSampleSize设置的值越大,质量就越差。
有时候我们取得一张,也许只是为了获得这个的一些信息,比如的width、height等信息,不需要显示到界面上,这个时候我们可以不把加载到内存中。
由于Android外层是使用java,而底层使用的是C语言为对象分配的内存空间。所以我们的外部虽然看起来释放了,但里层却并不一定完全释放了,我们使用完后最好再释放掉里层的内存空间。
RGB(ARGB)
RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。在Android中还有包含透明度Alpha的颜色模型,即ARGB。
YUV
YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。
YUV的原理是把亮度与色度分离,研究证明,人眼对亮度的敏感超过色度。利用这个原理,可以把色度信息减少一点,人眼也无法查觉这一点。
主要用于电视系统以及模拟视频领域,它将亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题
YUV的存储中与RGB格式最大不同在于,RGB格式每个点的数据是连继保存在一起的。即R,G,B是前后不间隔的保存在2-4byte空间中。而YUV的数据中为了节约空间,U,V分量空间会减小。每一个点的Y分量独立保存,但连续几个点的U,V分量是保存在一起的,(反正人眼一般也看不出区别)这几个点合起来称为macro-pixel, 这种存储格式称为Packed格式。另外一种存储格式是把一幅图像中Y,U,V分别用三个独立的数组表示。这种模式称为planar模式。
CMYK
CMYK也称作印刷色彩模式,顾名思义就是用来印刷的。印刷四分色模式是彩色印刷时采用的一种套色模式,利用色料的三原色混色原理,加上黑色油墨,共计四种颜色混合叠加,形成所谓“全彩印刷”。四种标准颜色是:
CMYK和RGB相比有一个很大的不同:RGB模式是一种发光的色彩模式,你在一间黑暗的房间内仍然可以看见屏幕上的内容;CMYK是一种依靠反光的色彩模式,我们是怎样阅读报纸的内容呢?是由阳光或灯光照射到报纸上,再反射到我们的眼中,才看到内容。它需要有外界光源,如果你在黑暗房间内是无法阅读报纸的。只要是在印刷品上看到的图像,就是CMYK模式表现的。比如期刊、杂志、报纸、宣传画等,都是印刷出来的,那么就是CMYK模式的了。
CMYK原色与叠加之后的颜色对比
在不考虑透明度的情况下,一个像素点的颜色值在计算机中的表示方法有以下3种:
在Java中,float类型的变量占32位,int类型的变量占32位,short和char类型的变量都在16位,因此可以看出,用浮点数表示法编码一个像素的颜色,内存占用量是96位即12字节;而用24位整数表示法编码,只要一个int类型变量,占用4个字节(高8位空着,低24位用于表示颜色);用16位整数表示法编码,只要一个short类型变量,占2个字节;因此可以看出采用整数表示法编码颜色值,可以大大节省内存,当然,颜色质量也会相对低一些。在Android中获取Bitmap的时候一般也采用整型编码。
回想一下Android的BitmapConfig类中,有ARGB_8888、ARGB_4444、RGB565等常量,现在可以知道它们分别代表了什么含义。同时也可以计算一张在内存中可能占用的大小,比如采用ARGB_8888编码载入一张1920 1200的,大概就会占用1920 12004/1024/1024=879MB的内存。
采用低内存占用量的编码方式,比如BitmapConfigARGB_4444比BitmapConfigARGB_8888更省内存;
1920 1200的:
ARGB_8888:1920 1200 4/1024/1024=879MB
ARGB_4444,RGB565:1920 1200 2/1024/1024=439MB
在Android中,对的使用一定要关注,大多数情况下,占用内存多,OOM发生都是因为资源使用不当。不要盲目加一个大图到Android项目中,能使用9进来使用,而且9图本身尽可能小,另外能使用绘制实现就不要加一个资源。有些时候,在不影响用户体验的情况下,可以降低素材质量,比如不需要透明度的就不要了,有些透明度用肉眼看不出来。
以上就是关于安卓虚拟机为什么要用变量全部的内容,包括:安卓虚拟机为什么要用变量、Android:android.os中的Environment类说明是提供了访问环境变量的途径。这个环境变量指什么啊、android中怎样将EditText的值转换成Double类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)