上一次说到Android的Activity与J2ME的MIDlet的比较,那么这一次将要做对比的两个类,分别是J2ME的Displayable类与Android的View类。

说到Displayable类,也许大家没怎么直接用过,但是Canvas和Form这两个类对于J2ME手机编程的同学来说一定非常熟悉,它们分别是呈现低级用户UI和高级用户UI所必不可少的。以Canvas为例,J2ME对其封装了大量可被继承和Override的方法(其中paint(Graphics g)方法必须重写),这些方法的功能涵盖了触摸屏操作响应、按键响应以及屏幕绘制等多个方面。通过这些方法,我们可以监听用户的输入,并且向用户反馈不同的输出,即刷新屏显。上述功能是canvas作为UI必须要做的事情。

Android中的View类,功能还要强大很多,通过Override它的onDraw(Canvas canvas)方法可以实现屏幕的绘制,触摸屏响应与按键响应也通过设置默认的listener得以实现。

原理上说起来,这两个又是非常相像的,不过区别也很大,我列举几个我发现的区别。
1、repaint()方法与 invalidate()/postInvalidate()方法
如果去读API,我们可以发现J2ME中Canvas的repaint()与Android中View的invalidate()/postInvalidate()方法实现了相同的功能(连说明文字几乎都一样…),但是invalidate()/postInvalidate()两者却有着区别:invalidate()只能在UI这个线程里通过调用onDraw(Canvas canvas)来update屏幕显示,而postInvalidate()是要在non-UI线程里做同样的事情的。这就要求我们做判断,哪个调用是本线程的,哪个不是,这在做多线程callback的时候尤为重要。而在J2ME中,不管怎样直接调用repaint()就好了

2、另外,Android的View类的显示很大程度上是从XML中读取的,包括了它
的layout与很多属性,至于怎么读的以后再谈。而Canvas只需要Custom Draw就可以了,而且Canvas不能设置大小(那个fullScreenMode免谈),但是View可以。

3、View的构造函数,我们不需要再Activity中调用,但是Displayable的是必须的。在Activity中,我们要通过 findViewById来从XML中取得View,然后强制转换成View的子类型即可,而J2ME的Canvas是一定要构造出来的。

4、也许在UI的应用上,Android比J2ME强大的地方,就在于它的View有很多定义好的子类能让我们调用,就像VS.net中WinForm编程中那些控件一样,会很方便,也很漂亮。因为Android开源,将来普及之后一定会有很多第三方的控件能为我们所用,这才是大大拓展了Android之处。这会把我们从那些graphics.drawXXX函数中解放出来,也能让我们的应用程序变得更酷更炫。

关于对View(Android)和Displayable(J2ME)——主要是Canvas的比较我就谈这么多,我想会有很多地方没有考虑到,以后再补充吧。还是老样子,怎么用去读API和示例程序,我就不多说了。

下一次应该是对Android的Bitmap类以及J2ME的Image类进行比较。

谢谢!

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. android上一些方法的区别和用法的注意事项
  5. android实现字体闪烁动画的方法
  6. Android(安卓)Wifi模块分析(三)
  7. Android中dispatchDraw分析
  8. 浅析Android中的消息机制-解决:Only the original thread that cr
  9. Android四大基本组件介绍与生命周期

随机推荐

  1. 【总结】layout_below与layout_alignBott
  2. 开发Android第一步,安装SDK 1.6, 模拟器及
  3. android 录音机&示波器
  4. Android(安卓)App 增量更新实例(Smart App
  5. Android(安卓)兼容获取Mac地址与手机信息
  6. 修改AndroidStudio默认的compileSdkVersi
  7. 数据库表的查询操作实践演练(实验三)
  8. 解决“Connection to https://dl-ssl.goo
  9. 通過android selector改变界面状态
  10. 数据库表的查询操作(实验二)