J2ME和Android有什么关系?

RT。大家都说点吧。不求多,只要说到点上,马上采纳给分。本人菜鸟,只求入门性的点拨即可!... RT。大家都说点吧。不求多,只要说到点上,马上采纳给分。
本人菜鸟,只求入门性的点拨即可!
展开
 我来答
卜织叨
2010-07-13 · TA获得超过1369个赞
知道大有可为答主
回答量:484
采纳率:0%
帮助的人:1074万
展开全部
  J2ME与Android程序部分比较

  一、程序入口

  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组件。

  三、刷新处理

  J2me刷新:

  J2me高级UI组件由组件内部刷新实现,低级UI可以通过Canvas的repain()来刷新。低级UI架构可以用MVC方式来实现,建议使用二级缓存。

  Android刷新:

  Android提供接口onLayout来提供该View调整其里面组件元素的位置布局,用户只需要重写该接口就ok。刷新接口 onDraw,该接口用来刷新界面里面的绘制元素。该接口类似j2me Canvas的paint接口。不过两个平台传得参数有些意思。J2me传的时Graphics,而android传得是Canvas。Android绘制的时候会传入一个参数Paint。该对象表示绘制的风格,比如颜色,字体大小,字体格式等。如果是移植的话,建议android也使用二级缓存,这样也容易管理。

  四、用户事件处理

  J2me的键盘、触笔事件都是通过Canvas定义接口分发。用户只需要从写这些接口就ok。它们分别是。键盘接口为:keyPressed(),keyRepeated(),keyReleased()。触笔接口为:pointerPressed(),pointerReleased(),pointerDragged()。

  Android的键盘,触笔通过View中定义,只要override其接口就ok了。触笔处理接口onTouchEvent。软键盘 onKeyDown()、onKeyUp()、onTracKballEvent()。
  记得冯·诺依曼大神曾经对我们这些后辈说过,计算机是由运算器、控制器、存储器、输入设备和输出设备五大部分组成的。我们看看现如今的手机(mobile device),可以看到前面所述五大部分一样不少,这就是所谓的麻雀虽小,五脏俱全。但是由于设备的限制,手机在输入、输出设备上有很大的限制,在今天要谈到的用户输入响应上,于是就只由两种了,一个是手机按键,另一个是触摸屏。

  在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,即事件响应处理方法,这样就能让我们做一个软键盘出来(乍看起来比做windows软键盘简单,其实也并不容易,要是把它作为一个Activity跑得话,焦点问题还很麻烦),也可以做许多别的事情,这一点J2ME好像没有做到。
Storm代理
2023-07-25 广告
StormProxies是一家可靠的代理服务提供商,提供原生IP(住宅原生IP)和高匿名代理服务。以下是关于StormProxies的原生IP服务的一些信息:1. 住宅原生IP:StormProxies提供的住宅原生IP是指从真实的家庭或企... 点击进入详情页
本回答由Storm代理提供
sinxiao
2010-07-13
知道答主
回答量:63
采纳率:0%
帮助的人:7.2万
展开全部
没关系。相同的是都是用Java开发的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式