if (nava_home_popupWindow == null) { nvg_pophomeall_view = View.inflate(context, R.layout.popupwindow_homeall, null); et_home_search = (EditText) nvg_pophomeall_view.findViewById(R.id.et_home_search); et_home_search.setOnFocusChangeListener(new HmSchOnFocChangeLisenner(et_home_search, context)); nava_home_popupWindow = new PopupWindow(nvg_pophomeall_view, 550, // GlobalValues.WINDOW_H - GlobalValues.LAYOUT_TOPTITLE_HEIGHT - 50); nava_home_popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); 设置后的情况如下:
nava_home_popupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED);
如果想真正了解软件的执行过程,就必须分析它所依附的硬件平台。“计算机系统”(广义)发展这么多年,但基本模型不曾改变,不管是通用系统还是嵌入式系统等等。
1、系统硬件结构
一个典型系统的硬件组成如下图所示:
总线:连接系统各个部件的电子线路,做信号传输使用,有点类似于城市中的交通网络。总线一次传输的固定位宽大小,称为“字长”,与公路车道数类似字长越大,效率越高(真正发挥效率,需要系统软件和应用软件都是64bit)。现代计算机一般都是64bit(硬件层),但多数软件还都是32bit,所以硬件效能并没有完全发挥。嵌入式系统中,我们经常提的8bit MCU、16bit MCU、32bit MCU,指的就是它们的线宽,一般线宽与mcu内部寄存器宽度是一致的。
IO设备:也叫input/output设备,有了总线就需要有数据在总线上奔跑,数据从何而来?从IO设备中。对于输入操作,不是任何数据都是有效的,要想在总线上奔跑,必须满足一定的格式要求,那么对“原始数据”进行加工转换的设备叫做“控制器或适配器”。对于输出设备也是如此,计算机的处理结果,要经过适配器的处理才能以我们能看懂的方式展现出来。这也是“层”的概念应用,控制器的两端是计算机和人,只要保持两端接口不变,内部可以任意修改。
主存:就是PC的内存,是程序和数据的临时存储空间,“临时”是因为内存中的数据会掉电丢失;相对的是外存(硬盘),硬盘中的数据可以永久性存储。内存学名叫动态随机存取存储器(DRAM dynamic random access memory),相对的是静态随机存取存储器(SRAM static random access memory)。动态是指里边的数据必须周期性的刷新否则就会丢失;静态则不需要刷新。随机是指整个内存可以看作一个线性数组空间,每个字节都有自己的唯一地址,想取某个地址内容只需要直接给出地址即可,不需要做等待;相对的是顺序读取,就像以前的磁带(摄影机上),如果想取特定地址的内容,只能从某个地址连续的读取,直到目标地址,需要等待。
SRAM比DRAM好,可是我们的内存还只是DRAM。主要是因为SRAM工艺复杂集成度低,容量太小,不适合大容量使用,而这些缺点都是DRAM的优点。但是SRAM速度较快,所以cpu内部的L1L2缓存都用的是SRAM,一般只有10M大小。
处理器:这是系统的核心,负责读取主存中的指令并执行输出,也叫cpu(central processing unit)。cpu的核心是程序计数器PC(program counter),负责指示下一条要执行的“代码”地址。这里的“代码”不再是我们的源程序,而是cpu本身的指令集。不同的架构对应不同的指令集,例如mip指令集、51指令集、arm指令集等等。cpu内部还有一组寄存器组,负责保存临时数据,供运算单元ALU使用。
2、hello程序执行过程
大致熟悉了硬件组织之后,就开始分析程序的执行过程了。首先shell程序等待用户输入命令,我们从键盘键入“./hello”命令,shell依次读取字符到寄存器,然后保存在内存中。数据流如下:
数据流:鼠标、键盘-》io总线-》寄存器-》系统总线-》主存中
当键入“回车键”,shell认为命令输入完成,解析命令。把hello程序的代码和数据从硬盘拷贝到主存中,这个过程不需要cpu参与。现代计算机都有DMA(直接存储器存取)控制器,负责内存和硬盘之间大批量数据传输,最早的计算机中如果需要交换数据,就需要把数据先读到寄存器中,然后再交给对方,大量占用cpu时间。后来专门做了一个DMA控制器,cpu只要告诉DMA控制器数据传输的方向、源地址、目标地址和数据大小,DMA控制器就能自己完成数据传输,完成后给cpu发送完成中断。数据流如下:
当hello文件导入完毕,处理器就开始执行机器语言,把字符串“hello,world\n”从内存导入寄存器中,然后发送给显示设备,就是我们看到的那样。数据流如下:
至此,就完成了整个程序的执行过程,输出完成后shell结束hello程序,继续接管命令窗口,等待用户输入新命令,如此持续循环下去。
1、游戏安装:
智能机可能在安装上不会出现比较明显的问题,小容量机就比较明显,受制于容量和处理器,在安装的时候很容易会造成死机,或者安装成功后不能游戏。还有一类问题,就是当测试机已经有一个此游戏的老版本,再覆盖安装新版本的时候,可能会出现一些奇怪的问题,不过发生几率比较低。
2、游戏开始:
LOGO SCREEN必须要有,作为一个公司的品牌,这个是必须的。如果是腾讯渠道的项目,那么开始游戏的时候需要有腾讯的LOGO(不过腾讯的LOGO一直在变 [点击图片可在新窗口打开] )。开始游戏之后,游戏主页面应该包含 开始游戏(start)、继续游戏(continue)、设置(option)/音乐(music)、帮助(help)、关于(about)、退出游戏(exit),这些缺一不可。
开始游戏,点击后开始新游戏。
继续游戏,从上次存档点开始继续游戏。
设置或者音乐项,主要是此项的功能就是为了开启和关闭游戏音乐,有可能会附带其他功能,大多数游戏会只有一个开始关闭音乐功能,所以可能会直接写成音乐,或者打开/关闭音乐,这要看每个公司自己的定义。
帮助,主要内容就是游戏世界观介绍,游戏按键说明。其中游戏按键说明必须与游戏中的按键完全相同。
关于,主要内容是关于此游戏制作公司等相关信息,这要看每个公司自己的定义了。
退出游戏,点击后游戏关闭。
3、游戏中:
这个就是一个很庞大的问题了,RPG、动作、运动、射击……等等各种类型的游戏都有自己不同的测试内容。
RPG类:游戏内容:主线任务、支线任务、物品、技能、宠物(如果有的话)、数值
图像:像素残余、像素残缺、图像出屏
音效:音效流畅、可以正确的打开及关闭音效
文字:文字出屏、错别字、敏感字
动作类:游戏内容:人物属性,技能
图像:像素残余、像素残缺、图像出屏
音效:音效流畅、可以正确的打开及关闭音效
文字:文字出屏、错别字、敏感字
帧速率:好的公司会在设计说明中规定游戏的帧速率值,确保游戏的流畅性,可是却缺少工具来衡量实际的帧速率,只能靠感觉了。如果觉得游戏卡,就报帧速率过低的错误吧。
PS:其他类型的游戏我没怎么接触过,实在是不太好归纳。以上2点是我平时公司时想到的一些,肯定不全面,我会继续补充的。
4、游戏后:
此阶段是指游戏通关后的情形。
结束画面。
PS:呵呵,说实话,游戏结束画面,我还真没见过几次。公司项目特别紧张,经常是只给几天的时间,能把所有机型跑一遍已经是万幸了,从来没通关过……
5、计费点:
国外的项目基本上都是下载付费的,跟国内的百宝箱差不多,这块其实就不用测试人员去测试了。国内项目就不太相同,现在很多项目都使用了游戏中相关功能开通收费的形式,我们称之为计费点。高级物品,钱,经验,关卡开通等等。每次在使用一个计费点模块的时候,手机都会发送一条短信,收到下行后,游戏就会开通这个计费点的功能。比如说你想购买10000金币,当选择购买后,游戏会最小化,然后手机发送出一条短信,此时,游戏会自动最大化,并提示你购买成功,然后你就获得10000金币。
流程是这样的,那么问题就来了,手机在频繁的获取计费点时,游戏来来回回的最小化、最大化,可能会出问题。
6、广告:
国外项目有些会在游戏开始页面加入广告,点击后会打开一个WAP页面。此模块测试目标就是频繁的打开页面会不会引起游戏死机,页面是否能打开。
7、中断:
中断是指在游戏运行的过程中,对游戏进行停止动作,例如短信,来电等,使游戏暂停。从而验证游戏的稳定性。
中断操作:
在游戏从手机软件列表点击进入开始起,一直到游戏完全退出,都算游戏过程,此过程中,游戏中的任何一屏,都应该可以中断,平且正常返回,且不会出现任何问题。游戏在中断后,应该会显示出一个暂停屏,此屏一般为黑底,提示信息为:“press center/5 key to continue” 或“按中心键/5键继续”。按中心键后游戏继续运行。
中断的含义就是游戏在遇到其他事件时,能够暂停,所以这个很重要。在赛车类游戏中,中断后的游戏不可继续计时。
中断测试在国外手游公司是重中之重,但国内公司……唉,箱子不要求的他们也不要求了。
以上纯属个人抛砖引玉之用,还请各位大侠砖下留情……
我感觉我总结的这些还很片面,希望有达人能指点指点。