概括Android系统存在的种种BUG

移动开发 Android
Android系统里有这样两个概念,向上类型转换,向下类型转换,分别描述的是子类向基类和基类向子类的强制类型转换。

Android系统还是比较常用的,于是我研究了一下Android系统,在这里拿出来和大家分享一下,希望对大家有用。经过长时间学习Android系统的原理,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西。

就界面Layout来说,这个程序其实和Snake没有什么不同,同样是采用了FrameLayout,而且游戏的主界面由一个自定义的View来实现,这里是LunarView。读过上一篇文章的朋友也许会发现,Snake的架构是“定时器+系统调用onDraw”来实现的。

这里有一个***的缺陷就是onDraw是由Android系统来调用的。我们只能依赖它,却无法自行控制。这就好比一个黑盒,当然,总是能把我们要的东西给做出来,可却无法控制其做事的细节。

这对于游戏这样高效率的东西可是不利的,因此***的解决之道当然是把绘制这部分工作自己”承包“过来,告别吃大锅饭的,进入”联产承包制”时代。此外,由于游戏的本质就是连续两帧图片之间发生些许差异,那么要不断催生这种差异的发生,只要有某种连续不断发生的事件在进行就可以。

例如Snake中使用的定时器,就是在不断地产生这种“差异源”,与此类似,一个线程也是不断在运行中,通过它也是可以不断产生这种“差异源”的。如果说Snake中使用的Layout加自定义View是一把小型武器的话,那在SurfaceView对于android中游戏的开发来说就算是重型武器了。

我们使用前者时总是容易把游戏中某个对象(比如上文的每一个方格)当做一个小组件来处理,而后者则根本没有这种划分的概念,在它眼中,所有东西都是在Canvas(画布)中自行绘制出来的(背景,人物等)。

SurfaceView提供直接访问一个可画图的界面,可以控制在界面顶部的子视图层。SurfaceView是提供给需要直接画像素而不是使用窗体部件的应用使用的。Android图形系统中一个重要的概念和线索是surface。View及其子类(如TextView, Button)

要画在surface上。每个surface创建一个Canvas对象(但属性时常改变),用来管理view在surface上的绘图操作,如画点画线。还要注意的是,使用它的时候,一般都是出现在最顶层的:The view hierarchy will take care of correctly compositing 。

with the Surface any siblings of the SurfaceView that would normally appear on top of it.使用的SurfaceView的时候,一般情况下还要对其进行创建,销毁,改变时的情况进行监视,这就要用到SurfaceHolder.Callback。

  1.   public void surfaceChanged(SurfaceHolder holder, int format, int width,int height)  
  2.     {  
  3.         thread.setSurfaceSize(width, height);  
  4.     }  
  5. public void surfaceCreated(SurfaceHolder holder)  
  6. {//启动工作线程结束  
  7.         thread.setRunning(true);  
  8.         thread.start();  
  9.     }  
  10.     public void surfaceDestroyed(SurfaceHolder holder)  
  11.     {  
  12.         boolean retry = true;  
  13.         thread.setRunning(false);  
  14.         while (retry)   
  15.         {  
  16.             try  
  17.             {//等待工作线程结束,主线程才结束  
  18.                 thread.join();  
  19.                 retry = false;  
  20.             }   
  21.             catch (InterruptedException e)   
  22.             {  
  23.             }  
  24.         }  
  25.     } 

这个线程由私有类Android系统实现,它里面还有一个自己的消息队列处理器,用来接收游戏状态消息,并在屏幕上显示当前状态。(而这个功能在Snake中是通过View自己控制其包含的TextView是否显示来实现的,相比之下,LunarThread的消息处理机制更为高效)。由于有了LunarThread这个负责具体工作的对象,所以LunarView的大部分工作都委托给后者去执行。

【编辑推荐】

  1. Android应用程序组建原理深入剖析 
  2. Android SMS短信服务相关概念简述 
  3. PythonAndroid数据库相关代码解读 
  4. PythonAndroid安装卸载程序具体操作方法解析 
  5. Android应用程序的四个关键点 
责任编辑:chenqingxiang 来源: NET130
相关推荐

2010-03-03 16:14:56

Android系统市场

2010-03-05 15:43:46

Android SDK

2010-02-05 18:09:12

Android

2010-03-03 14:06:38

2010-02-06 09:32:18

Android Ser

2009-10-14 17:56:43

光纤布线系统

2009-10-15 12:54:09

综合布线系统

2009-10-28 16:20:01

2020-04-07 15:28:22

苹果MacOS漏洞

2010-07-20 16:14:42

2009-11-27 16:25:54

2011-05-11 11:08:57

2021-02-27 09:25:37

漏洞网络安全网络攻击

2017-12-18 11:16:31

iOS苹果Bug

2021-09-24 16:16:27

iOS苹果系统

2009-10-16 12:55:27

结构化布线系统

2009-12-29 13:12:03

Ubuntu Linu

2009-12-29 13:30:23

Ubuntu操作系统

2009-12-30 16:26:25

Linux Ubunt

2009-10-16 11:20:35

光缆布线系统
点赞
收藏

51CTO技术栈公众号