10、android应用程序组件之六-ui同步技术

10、android应用程序组件之六-ui同步技术

ID:15380015

大小:186.43 KB

页数:14页

时间:2018-08-03

10、android应用程序组件之六-ui同步技术_第1页
10、android应用程序组件之六-ui同步技术_第2页
10、android应用程序组件之六-ui同步技术_第3页
10、android应用程序组件之六-ui同步技术_第4页
10、android应用程序组件之六-ui同步技术_第5页
资源描述:

《10、android应用程序组件之六-ui同步技术》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第十章应用程序组件(六)UI同步技术本章目标•ANR现象•主子线程交互技术–Handler–Message–Looper•异步任务asynTaskANR问题?•处理事件的时间超时,怎么办?•调用服务层的时间超时,怎么办?Android线程•基本使用Java的线程库•异步的实现机制•分为消息循环和无消息循环的线程•相关类:Looper/Message/Handler/HandlerThread/MessageQueue主、子线程•主线程:一般指UI线程–带有MessageQueue消息队列的Looper线程–目的是快速处理UI事件–UI线程的事件处理不超过5秒

2、,否则android报错–UI线程调用服务Service层的时间也不能超过5秒•子线程:–一般不对UI控件进行操作线程间通信•Handler消息处理类–Handler()或Handler(Looper)–sendMessage(Message)•给消息队列发送消息–obtainMessage()•从消息队列中获取消息–post(Runnable)•消息提交给线程处理–handleMessage•在消息循环中,被调用的消息处理函数Looper类•Looper类(管理消息队列和消息循环)–staticLoopermyLooper()自定义looper–stati

3、cLoopergetMainLooper()UIlooper–prepare•消息队列初始化,产生一个looper(针对无消息循环队列的线程)–loop•进入消息队列循环处理示例:主子线程交互//主线程mMainHandler=newHandler(){publicvoidhandleMessage(Messagemsg){System.out.println("child->main:"+(String)msg.obj);}};newChildThread().start();mButton=(Button)findViewById(R.id.btn);m

4、Button.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewv){Messagemsg=mChildHandler.obtainMessage();msg.obj="aaaaaa";mChildHandler.sendMessage(msg);}});}示例:主子线程交互//子线程publicclassChildThreadextendsThread{publicvoidrun(){Looper.prepare();mChildHandler=newHa

5、ndler(){publicvoidhandleMessage(Messagemsg){System.out.println("main->child:"+(String)msg.obj);Messagemsg2=FourActivity.this.mMainHandler.obtainMessage();msg2.obj=msg.obj;FourActivity.this.mMainHandler.sendMessage(msg2);}};Looper.loop();}}异步AsyncTask•AsyncTask是一个抽象类•AsyncTask的特点是任务

6、在主线程之外运行,而回调方法是在主线程中执行,跟线程相比–多线程的开销大,另外如果是多匿名线程,管理不方便–在信息交互上,有效地避免了使用Handler带来的麻烦异步AsyncTask四个方法•onPreExecute()当任务执行之前开始调用此方法,可以在这里显示进度对话框。•doInBackground(Params...)此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度•onProgressUpdate(Progress...)此方法在主线程执行,用

7、于显示任务执行的进度•onPostExecute(Result)此方法在主线程执行,任务执行的结果作为此方法的参数返回。四个方法执行过程AsyncTask三个参数•AsyncTask–Params:传递给doInBackground(Params)的类型即后台运行任务的参数类型–Progress:传递给onProgressUpdate(Progress)的参数类型–Result:传递给onPostExecute(Result)的参数类型示例:AsyncTaskprivateclassDownloadFilesT

8、askextendsAsyncTask

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。