android区别J2ME

问题描述

小弟新手,想请问下J2ME与android都可以开发手机应该,他们的区别和相同点到底在哪里?谢谢

解决方案

J2ME与Android比较 - [手机开发]版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://cjbskysea.blogbus.com/logs/65100957.html一、 程序入口J2me程序入口类为MIDlet,所有的j2me程序都要继承该类来初始化j2me程序。Android程序入口是Activity类。下面先看看它们的生命周期。J2me MIDlet生命周期1、 startApp (活动状态)程序启动的时候会调用该方法来初始化用户需要的资源。2、 PauseApp (暂停状态)当手机来电接电话的时候,会调用该接口。用户可以调用该接口停止也写线程的操作。3、 destroyApp (销毁状态)程序退出的时候调用。用户可以调用该接口处理处于活动状态的线程。该几个周期状态有AMS调用转换,也可以程序代码调用转换。resumeRequest调用会的结果是AMS会调用startApp方法,notifyPaused调用的结果是可能AMS调用PsuseApp,notifyDestroyed调用会使AMS销毁该midlet。Android Activity生命周期1、 onCreate 程序开始初始化的时候调用该接口,用户导航返回到Activity的时候也会调用该接口。类似于J2me里面多个Canvase(Displayable)切换。所以Activity也类似于Displayable。2、 onStart onCreate调用完后,程序调用该接口。3、 onResume onStart调用后调用该接口。此时Activity进入运行状态。4、 onPause 新的Activity启动的时候调用该接口。5、 onStop 该Activity 不可见的时候调用。6、 onDestroy 程序销毁的时候调用。二、显示组件J2me 中所有可显示的组件都是直接或间接的继承了Displayable,直接的是Canvas和Screen。不同的继承导致了低级UI和高级UI的区别。 J2me中现成的UI组件都是直接或者间接继承了Screen。只要调用Display.getDisplay(MIDLet instan).setCurrrent(Displayable disp),就可以把组件显示到手机界面上。切换界面的时候也可以使用该接口。Android 可见的组件直接或者间接继承了android.view.View。通过Activity.setContentView(View view)就可以显示在android手机界面上,切换界面的时候也可以使用该接口。如果是直接继承了View而不是Android自带的UI组件,那么还要自己去实现它的刷新,类似J2me的低级UI组件。三、UIJ2me高级UI组件由组件内部刷新实现,低级UI可以通过 Canvas的repain()来刷新。低级UI架构可以用MVC方式来实现,建议使用二级缓存。Android提供接口onLayout来提供该 View调整其里面组件元素的位置布局,用户只需要重写该接口就ok。刷新接口onDraw,该接口用来刷新界面里面的绘制元素。该接口类似j2me Canvas的paint接口。不过两个平台传得参数有些意思。J2me传的时Graphics,而android传得是Canvas。Android绘制的时候会传入一个参数Paint。该对象表示绘制的风格,比如颜色,字体大小,字体格式等。如果是移植的话,建议android也使用二级缓存,这样也容易管理。如果去读API,我们可以发现J2ME中Canvas的repaint()与Android中View的 invalidate()/postInvalidate()方法实现了相同的功能,但是invalidate()/postInvalidate()两者却有着区别:invalidate()只能在UI这个线程里通过调用onDraw(Canvas canvas)来update屏幕显示,而postInvalidate()是要在non-UI线程里做同样的事情的。这就要求我们做判断,哪个调用是本线程的,哪个不是,这在做多线程callback的时候尤为重要。而在J2ME中,不管怎样直接调用repaint()就好了。另外,Android的View类的显示很大程度上是从XML中读取的,包括了它的layout与很多属性,至于怎么读的以后再谈。而Canvas只需要 Custom Draw就可以了,而且Canvas不能设置大小(那个fullScreenMode免谈),但是View可以。View 的构造函数,我们不需要再Activity中调用,但是Displayable的是必须的。在Activity中,我们要通过findViewById来从XML中取得View,然后强制转换成View的子类型即可,而J2ME的Canvas是一定要构造出来的。也许在UI的应用上,Android比J2ME强大的地方,就在于它的View有很多定义好的子类能让我们调用,很方便,也很漂亮。因为Android开源,将来普及之后一定会有很多第三方的控件能为我们所用,这才是大大拓展了Android之处。这会把我们从那些graphics.drawXXX函数中解放出来,也能让我们的应用程序变得更酷更炫。四、用户事件处理在J2ME下,Canvas可以响应按键事件与触摸屏事件,它封装了六个 protected的方法,响应六种不同的事件:keyPressed(int keyCode)用于响应按键压下、keyReleased(int keyCode)用于响应按键释放、keyRepeated(int keyCode)用于响应按键长时间压下不释放;pointerDragged(int x,int y)用于响应触摸屏拖拽、pointerPressed(int x,int y)用于响应触摸屏点击、pointerReleased(int x,int y)用于响应触摸屏释放。其中参数方面,keyCode告诉我们哪个按键触发的事件,x、y分别告诉我们触摸屏被点击的坐标(绝对位置)。在 Android下,View同样可以响应以上两种事件,分别有:boolean onKeyDown(int keyCode,KeyEvent event)用于响应按键点击、boolean onKeyMultiple(int keyCode, int repeatCount,KeyEvent event)用于响应按键重复点击、boolean onKeyUp(int keyCode,KeyEvent event)用于响应按键释放以及onTouchEvent(MotionEvent event)用于响应触摸屏事件。官方API指出onKeyMultiple方法总是返回false的,即它没有handle,因此必须重写才能实现。在键盘事件方面,J2ME与Android的区别在于Android中定义了KeyEvent这个类,用于描述按键事件。这个KeyEvent可不简单,它能够将一个按键事件描述的淋漓尽致。它的getAction()方法,可以得到按键的行为(down、up or multiple);它的getDownTime()可以得到最近一次keyDown事件发生的时间;它的getEventTime()可以得到本次事件发生的时间;它的getRepeatCount() 可以得到同一按键被连续点击的次数(这个很大程度上是为onKeyMultiple方法设计的)。有一点是非常需要注意的,Android底层在触发 keyDown事件时,有一点与J2ME很不一样:比如我们按下一个键但不释放,J2ME只触发一次keyDown事件由keyPressed()执行,然后就交给keyRepeated()处理,然而Android是每隔一段时间(几十毫秒)就触发一次,onKeyDown方法会连续响应事件,造成意想不到的事情。想解决这个问题倒也不难,你可以通过getAction判断这次事件是否是keyDown,如果是的话,用getEventTime()减去 getDownTime(),如果这个数值太小,可以选择不响应。这个方法简单,但是如果用户输入太快,真正的输入也可能被忽略掉,所以还有另外一种方法:维护一个堆栈,在重写onKeyDown()与onKeyUp()方法的时候,如果getAction()是keyDown,就入栈,如果是 keyUp,就出栈,如果得到一个事件,当它是keyDown的时候,如果当前栈顶是keyDown,就选择性不响应这个事件,这样的话,长点击就相当于一次点击。其实有一些view的子类,比如Button加入了onLongClick()的处理方法这样即使你用选中这个view,长时间按下选择键,也可以相应的处理。在触摸屏方面,Android只有onTouchEvent()来处理,但是由于它的参数中有 MotionEvent,所以J2ME下分开的三种事件可以通过MotionEvent的getAction()方法加以区分。比较有意思的是 MotionEvent中有一个getPressure()方法,能够得到点击的压力,看来Android手机的元件精密程度很高,乃至软件可以得到压力的大小并通过它来做一些逻辑。还有一点,Android的KeyEvent与MotionEvent是可以自己构造的,KeyEvent可以通过dispatch()方法将自己传递给KeyEvent的Callback,即事件响应处理方法,这样就能让我们做一个软键盘出来,也可以做许多别的事情。五、数据库它们的区别在于android的sqlite很容易建立表到表之前的关联,而J2ME必须实现自己的一套框架,而且ANDROID的sqlite提供一些接口(如:SQLiteOpenHelper),数据库开发会很容易, J2ME可以看成在一个文件读写一些序列化的东西,而android只要会一些sql语句。

时间: 2024-11-03 03:18:12

android区别J2ME的相关文章

Android 区别真机和模拟器的几种方法_Android

现在的模拟器的功能太强大,从蓝牙,传感器等配件到IMEI,Mac,以及手机硬件信息什么都可以模拟 为了防止用户利用模拟器模仿真机进行刷单,刷流量等恶意操作. 需要获取设备返回的一些信息来鉴别设备的真伪. 下面是整理的模拟器和真机的区别 虽然大部分都可以模仿,伪造,但是如果综合所有维度来监控,应该不存在太大问题. 一,native方式. 通过c代码读取设备中的配置和硬件相关信息. 1,diskstats 获取闪存的分区状态信息. int fd = open("/proc/diskstats&quo

Android 区别真机和模拟器的几种方法

现在的模拟器的功能太强大,从蓝牙,传感器等配件到IMEI,Mac,以及手机硬件信息什么都可以模拟 为了防止用户利用模拟器模仿真机进行刷单,刷流量等恶意操作. 需要获取设备返回的一些信息来鉴别设备的真伪. 下面是整理的模拟器和真机的区别 虽然大部分都可以模仿,伪造,但是如果综合所有维度来监控,应该不存在太大问题. 一,native方式. 通过c代码读取设备中的配置和硬件相关信息. 1,diskstats 获取闪存的分区状态信息. int fd = open("/proc/diskstats&quo

求android移植J2me解决方案分析

问题描述 小弟最近刚开始接触到android,发现其虚拟机dalvik与JVM存在较大不同,细研究了一下,对于j2me的应用开发者角度看关键之处为两者执行的字节码不同,但存在着转化关系,即JVM的class经由android提供工具dx转化为dalvik的dex字节码.但这种转化貌似只能在编译环境下进行,无法在运行时进行.现在在ophone的百宝箱上已经完成了这一工作,但对其实现的方案不甚了解,不知他的JVM是如何嫁接到android系统之上.现寻求一种android上可直接运行jar的方案,或

我的Android进阶之旅------>经典的大牛博客推荐(排名不分先后)!!

今天看到一篇文章,收藏了很多大牛的博客,在这里分享一下 谦虚的天下 柳志超博客 Android中文Wiki AndroidStudio-NDK开发-移动开发团队 谦虚的天下 - 博客园 gundumw100博客 - android进阶分类文章列表 - ITeye技术网站 CSDN博文精选:Android系列开发博客资源汇总 - CSDN.NET - CSDN资讯 Android笔记本--半年来的研究笔记,导航. - 思想实践地 - CSDN博客 [魏祝林]Android中级教程 - Androi

北京急聘手机开发工程师

问题描述 新网互联急聘:手机开发工程师工作职责:1.独立负责手机核心客户端软件架构,并承担核心模块开发工作:2.独立负责手机平台核心组件软件架构,并承担核心模块开发工作.职位要求:1.全日制本科及以上学历,计算机科学.通信工程.电子科学等相关专业:2.五年以上无线开发经验,精通至少一种手机平台(Symbian,Android,J2ME等):3.精通主流手机平台编程语言(C,C++,或Java等),数据结构,算法等基础知识扎实,具有良好的编程风格和习惯:4.熟悉面向对象编程及设计模式,并能灵活应用

来点给力的

问题描述 做手机应用程序服务器端的开发.跟做javaee区别大么,主要用到哪些方面的技术,貌似对网络编程和多线程要求很高?.做过的朋友给点力吧.万分感谢 解决方案 解决方案二:该回复于2011-01-07 08:51:17被版主删除解决方案三:该回复于2011-01-07 08:56:29被版主删除解决方案四:该回复于2011-01-07 08:58:40被版主删除解决方案五:不是这个迷,看看解决方案六:该回复于2011-01-07 08:37:36被版主删除解决方案七:该回复于2011-01-

Symbian学习笔记(8)——再尝试着做一个数独游戏

仍是做一个同样界面同样功能的数独游戏,但是所花费的时间远远超出我用Android或者J2ME来做同样的事情,当然运行效率也很明显(我将J2ME实现的数独放在N73上跑过,因为重绘屏幕的代码没有优化,所以效果不好,但同样的算法在BREW或者Symbian上就跑得相当顺畅). 这次我主要谈谈在做这个 Symbian版本中遇到的几个问题,希望以后自己不要再犯同样的错误了. 1.多视图的应用程序框架的问题 我用的是Carbide C++ IDE环境,不知道为什么不能生成多视图的架子,所以只能在Hello

java的信息

问题描述 我是刚学习java的想知道什么书比较适合 解决方案 解决方案二:不知道你的情况,真还说不好什么适合,可以去书店看一下,找一个前面基本能明白,后面又不太明白的书先看着.还有,你想学java干什么,这个也比较重要.解决方案三:去搜索下孙wei琴写的书比较适合初学者!解决方案四:呵呵谢谢我是学计算机的我感觉老师讲的听不进去所以想找书看看解决方案五:问这个问题的很多,去百度吧!!!!解决方案六:java核心技术JAVA设计模式想做Web的话就看下SPRINGajaix和script.想做手机开

电子支付牌照呼之欲出

近几年,有关电子支付牌照的传闻不绝于耳,但始终"只闻楼梯响,不见人下来".最近央行已明确表示,将给快速发展的第三方支付平台发放通行证.对此,支付宝.快钱.上海环迅相关负责人均表示,他们已经做好准备,静待央行发令. 本报记者 戈清平报道 最近关于发放电子支付牌照的事宜有了新的动向.在此前举办的2009中国 网上银行年会上,中国人民银行支付结算司司长欧阳卫民表示,央行下一步将给快速发展的第三方支付平台发放通行证.虽然他没有透露具体时间表和门槛等细节,但他表示希望银行尽快做好准备. 近几年,