现在的位置: 首页 > 综合 > 正文

android悬浮窗–获取内存

2013年11月12日 ⁄ 综合 ⁄ 共 7073字 ⁄ 字号 评论关闭

首先,得先说明,这个例子并不是我写的,是从eoeAndroid的一个帖子上面看到的,下载了他的源代码,然后分析一下,供学习共享。(另外,对于其代码有所修改,以便于更好的说明问题,另:同时把源代码上传,下载地址:http://download.csdn.net/detail/aomandeshangxiao/3880055

         一开始,我们先看一下运行效果:

其中,

这一块就是悬浮窗,可以随意拖动,动态显示当前内存使用量。

         下面看一下代码是如何实现的:

悬浮窗的实现是用了一个service,为什么要用service呢?了解service特点的大体就会明白。下面看一下:


其主要功能部分在creatView方法里:


首先,代码里面用到了 WindowManager借口,整个Android的窗口机制是基于一个叫做
WindowManager,这个接口可以添加view到屏幕,也可以从屏幕删除view。它面向的对象一端是屏幕,另一端就是View,直接忽略我们以前的Activity或者Dialog之类的东东。其实我们的Activity或者Diolog底层的实现也是通过WindowManager,这个 WindowManager是全局的,整个系统就是这个唯一的东东。它是显示View的最底层了。(该段文字来自网络大笑
其方法很简单,基本用到的就三个addView,removeView,updateViewLayout。另:在设置View高度和宽度的时候一个错误,即在View的构造函数中获取getWidth()和getHeight(),当一个view对象创建时,android并不知道其大小,所以getWidth()和getHeight()返回的结果是0,真正大小是在计算布局时才会计算,所以会发现一个有趣的事,即在onDraw(
) 却能取得长宽的原因。使用一下方法即可:

下面是LayoutParams,设置他的属性:详情请看上一篇文章:

http://blog.csdn.net/aomandeshangxiao/article/details/7040486

在这里是设置成了所有应用程序之上,状态栏之下的形式,当移动的时候,会调用case
MotionEvent.ACTION_MOVE:

下面的代码主要是:

从新设置浮动栏的位置参数。这样就实现了拖动的功能。其内存数据是如何获取及及时更新的呢?

我们注意到了handler:


我们找到dataRefresh方法,delaytime是设置的1000,也就是每一秒钟更新一次数据。


最后,看下memInfo的定义:

里面只定义了两个方法,获取总内存和使用内存。

抱歉!评论已关闭.