Android事件处理机制

2025-05-15 07:31:38

1、1.汰拶珏茧监听事件处理 基于监听的事件处理分工明确,可维护性高,且会优先触发。 内部类形式:Class MyClickListener implements View.O荏鱿胫协nClickListener{ 实现的方法,即事件处理器} 外部类形式:将事件监听器类定义成一个外部类:public class SendSmsListener implements OnLongClickListener{容易把业务逻辑和显示逻辑耦合,不利于程序的内聚性:p195} Activity本身作为事件监听器:让Activity本身实现监听器接口,并实现处理方法。做法简洁,Activity本身应该完成界面的初始化工作,同时包含事件处理比较混乱。public 匿名内部类形式:btn.setOnClickListener( new OnClickListener(){ 实现时间的处理方法 }); 绑定到标签:在XML未指定标签绑定事件处理方法,android:onClick = "clickHandler",写一个clickHandler(){ 处理 }方法。

2、2.回调事件处理 监听事件处理是委托式处理,回调事件处理是实现组件自己特定的方法来处理事件,没有监听事件。 public MyButton extends Button{ public boolean onKeyDown(int KeyCode,KeyEvent event){ super.onKeyDown(KeyCode,event); Log.v("返回值","true不会向外扩散"); return true; } }MyButton重写了父类的onKeyDown()方法,不需要绑定监听,自己会处理相应的事件。回调方法的返回值为true表示能完全处理,不会传播出去。返回false,表示未完全处理,会传播出去。如果没有完成处理(false),则由监听器-->事件回调-->传播到activity,都会出发该方法处理。

3、3.相应系统设置的事件 Configuration类专门用于描述手机上配置信息,包括用户特定配置和系统动态配置。 Configuration cfg = getResources().getConfiguration();获取了Configuration对象可以使用该对象提供的属性来获取系统配置。

4、4.Handler消息传递机制 主线程又称为UI线程,在主线程不进行耗时操作,这是需要用到handler。耗时操作会引发ANR异常。 Handler类主要有两个作用:在新启动的线程中发送消息至MessageQueue ;在主线程中获取Looper分给他的消息,处理消息。 Looper :每个线程只能拥有一个looper ,负责管理MessageQueue,不断从消息队列中取出消息,分给对应的Handler处理。 MessageQueue :消息队列,采取先进先出的方式管理message。 HandlerMessage() :Handler接收和处理的消息对象。 在主线程中,系统已经初始化了一个Looper对象,因此程序直接创建Handler并收发消息即可;而自己启动的子线程,必须自己创建一个Looper对象并启动它:Looper.prepare()创建对象并保证只有一个Looper对象。 Android不允许在子线程中更改UI组件,需要在子线程中更改界面组件必须用handler实现。

5、5.异步任务 实现异步任务的机制有两种:Handler和AsyncTask。 AsyncTask<Params,Progress,Result> 三种泛型类型分别代表“启动任务执行的输入参数”、“后台任务执行的进度”、“后台计算结果的类型”。在特定场合下,并不是所有类型都被使用,如果没有被使用,可以用java.lang.Void类型代替。 一个异步任务的执行一般包括以下几个步骤: 1.execute(Params... params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。 2.onPreExecute(),在execute(Params... params)被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。 3.doInBackground(Params... params),在onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。 4.onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。 5.onPostExecute(Result result),当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。 在使用的时候,有几点需要格外注意: 1.异步任务的实例必须在UI线程中创建。 2.execute(Params... params)方法必须在UI线程中调用。 3.不要手动调用onPreExecute(),doInBackground(Params... params),onProgressUpdate(Progress... values),onPostExecute(Result result)这几个方法。 4.不能在doInBackground(Params... params)中更改UI组件的信息。 5.一个任务实例只能执行一次,如果执行第二次将会抛出异常。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
相关推荐
  • 阅读量:31
  • 阅读量:92
  • 阅读量:48
  • 阅读量:59
  • 阅读量:46
  • 猜你喜欢