当前位置:  编程技术>移动开发
本页文章导读:
    ▪Handler-不可缺少的异步(sundy深入显出)之进程和线程        Handler-不可缺少的异步(sundy深入浅出)之进程和线程     写在前面的话:本系列主要是学习sundy的Android深入浅出视频中的一些记录,心得。方便自己以后查阅。也供大家查看。欢迎交流,补.........
    ▪ 兑现按钮按下的效果        实现按钮按下的效果 public boolean onTouch(View v, MotionEvent event)  { Intent intent = new Intent();   switch(v.getId())  {    case R.id.user_guide:  //使用说明   if(event.getAction()==MotionEvent.ACTION_DOWN)   {   .........
    ▪ AsyncTask异步任务(sundy深入显出)之进程和线程       AsyncTask异步任务(sundy深入浅出)之进程和线程 写在前面的话:本系列主要是学习sundy的Android深入浅出视频中的一些记录,心得。方便自己以后查阅。也供大家查看。欢迎交流,补充。 一.........

[1]Handler-不可缺少的异步(sundy深入显出)之进程和线程
    来源: 互联网  发布时间: 2014-02-18
Handler-不可缺少的异步(sundy深入浅出)之进程和线程

 

 

写在前面的话:本系列主要是学习sundy的Android深入浅出视频中的一些记录,心得。方便自己以后查阅。也供大家查看。欢迎交流,补充。

一般作为面试题(有些有答案,有些没有。问题一般从sundy老师思维导图中摘录,答案并非唯一标准,仅供参考):

 

 

1、使用Handler是异步的,它会建立新线程么?

不会


2、Handler是在主线程内么?

一般情况下,handler是在主线程内,不过我们也可以控制在当前线程内,比如传入的loop是当前线程的。


3、Handler的post 和 sentMessage方法,使用的是一个队列还是两个?

使用的是一个队列,查看Handler的实现源代码,就会发现post和sentMessage调用的是同一个方法。


4、子线程中建立一个handler,然后sendMessage会怎样?

会抛异常,但是如果在子线程中实例化loop,则正常


5、子线程建立handler , 构造的时候可以传入主线程的Looper 吗?

可以

6、当前线程中有一个Looper这样的循环在监听消息队列,但又不是额外的线程,这不是和我们学习的常理相悖么?
不相悖,Looper是由系统来控制的

7、Handler是什么,作用以及为什么要引入Handler的概念?
Hanlder作用:
1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器
2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以再你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。
角色描述:
1)Looper:(相当于隧道) 一个线程可以产生一个Looper 对象,由它来管理此线程里的Message Queue( 车队,消息隧道) 。
2)Handler: 你可以构造Handler 对象来与Looper 沟通,以便push 新消息到Message Queue 里;或者接收Looper( 从Message Queue 取出) 所送来的消息。
3) Message Queue( 消息队列): 用来存放线程放入的消息。
4 )线程:UI thread 通常就是main thread ,而Android 启动程序时会替它建立一个Message Queue 。

每一个线程里可含有一个Looper 对象以及一个MessageQueue 数据结构。在你的应用程序里,可以定义Handler 的子类别来接收Looper 所送出的消息。

8、主线程就一个消息队列,为什么不同Handler实例之间不能共享消息?
以内message有一个属性what  target是一个标志(这里sundy已经说明这里课程里讲错了,应该是 target 属性)

9、Handler1.sendMessage, Handler2能接收么?
不可以,答案同8

------下面是一些总结------
1、Handler实例与消息处理是关联的,发送和接收要匹配---handle1发送的数据,要由handle1来接收
2、Handler操作队列,主要是在子线程操作主线程消息队列---最常见的就是在子线程中更新UI界面
3、子线程默认是没有消息队列的---但是我们可以使用HandleThread,那么子线程就会有自己的消息队列


    
[2] 兑现按钮按下的效果
    来源: 互联网  发布时间: 2014-02-18
实现按钮按下的效果

public boolean onTouch(View v, MotionEvent event)
 {
 Intent intent = new Intent();
 
  switch(v.getId())
  {
  
  case R.id.user_guide:  //使用说明
   if(event.getAction()==MotionEvent.ACTION_DOWN)
   {
    btnUserGuide.setBackgroundResource(R.drawable.main_button_touched);
   }
   else if(event.getAction() == MotionEvent.ACTION_UP)
      {
          btnUserGuide.setBackgroundResource(R.drawable.main_button);
          intent.setClass(Main.this,UserGuider.class);
          startActivity(intent);
      }
     
   break;

 

 

....


    
[3] AsyncTask异步任务(sundy深入显出)之进程和线程
    来源: 互联网  发布时间: 2014-02-18
AsyncTask异步任务(sundy深入浅出)之进程和线程

写在前面的话:本系列主要是学习sundy的Android深入浅出视频中的一些记录,心得。方便自己以后查阅。也供大家查看。欢迎交流,补充。

一般作为面试题(有些有答案,有些没有。问题一般从sundy老师思维导图中摘录,答案并非唯一标准,仅供参考):

 

1、AsyncTask是多线程么?

是的,并且用到了线程池


2、与Handler相比, AsyncTask消耗资源情况如何,为什么?

AsyncTask消耗的 资源更多,Handler比AsyncTask轻量

3、AsyncTask的定义?
Android为了降低异步操作开发难度,在Handler基础上提供了AsyncTask。AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。

----------总结----------

1、AsyncTask定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。

2、AsyncTask方法:
1)必选方法:
doInBackground(Params…) 后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回

2)可选方法:
onProgressUpdate(Progress…)   可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
onPreExecute()        这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
onCancelled()             用户调用取消时,要做的操作

3、AsyncTask三个状态:pending , running , finished

4、使用AsyncTask类,遵守的准则:

Task的实例必须在UI thread中创建;
execute方法必须在UI thread中调用;
不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...);onProgressUpdate(Progress...)这几个方法;
该task只能被执行一次,否则多次调用时将会出现异常;

 


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
论坛 iis7站长之家
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3