学习总结——android的消息机制handler
来源:互联网 发布:dnf一进pk场就网络中断 编辑:程序博客网 时间:2024/05/17 04:36
写在前面:
近来总是怀疑自己的前面究竟还有没有出路,菜鸟初飞总是畏畏缩缩。在茫茫海雾面前,我不知道前面是否有瑰丽晚霞。也总是出现学了就忘,知识理解不够深入,知识点之间没有联系的问题。如此循环,甚是让人沮丧。由此,我将开始博客记录学习过程中的知识点总结,彼此的联系,自己的感悟等等。
一旦需要和别人讲述某个概念或者知识的时候,却发现无法表述清楚,这是一种普遍现象,原因是我们其实并没有真正的理解,学习不到位。
如果我们总是在接触新的知识,却没有停下来去整合它们,并将付诸实践,继续这样不停地接触新知识,我们的大脑就会堵塞。
学到后面,我又将本文中的一些错误偏差改正过来,希望本文更加严谨。
一.从所写代码开始:
import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.ProgressBar;public class TestBarHandler extends AppCompatActivity { private Button starbutton; private ProgressBar mprogressbar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_bar_handler); starbutton = (Button) findViewById(R.id.starbutton); mprogressbar = (ProgressBar) findViewById(R.id.mprogressbar); starbutton.setOnClickListener(new buttonListener()); } class buttonListener implements View.OnClickListener{ @Override public void onClick(View v) { mprogressbar.setVisibility(View.VISIBLE); updateBarHandler.post(updatethread); } } Handler updateBarHandler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); mprogressbar.setProgress(msg.arg1); updateBarHandler.post(updatethread); } }; Runnable updatethread = new Runnable() { int i = 0; @Override public void run() { System.out.println("Begin Thread"); i = i + 10; Message msg = updateBarHandler.obtainMessage(); msg.arg1 = i; try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } updateBarHandler.sendMessage(msg); if(i == 100){ updateBarHandler.removeCallbacks(updatethread); } } };}
代码执行流程:
为button设置监听器后,点击button按钮,将进度条设置为可见,并将线程updatethread加入线程队列中。
然后在updatethread中,创建一个message,并将message的一个成员变量msg1设置值。通过handler的sendmessage()方法将message加入消息队列中。
最后用handler中的handlermessage()方法取出消息。(其实主要是消息携带的成员变量msg1),用msg1修改进度条的值。修改后在这里它又重新调用post()方法将updatethread加入线程队列。
由此循环。
二.了解handler
1.可以说handler是线程之间的通讯兵,他的作用就是发送和处理消息,就像intent对于Activity一样。可以通过Handler将Message对象发送到该Handler所关联线程的MessageQueue(消息队列)中,然后该消息队列一直在循环拿出一个Message,对其进行处理。
主线程:
也叫UI线程,或称ActivityThread,用于运行四大组件和处理他们用户的交互。 ActivityThread管理应用进程的主线程的执行(相当于普通Java程序的main入口函数),在Android系统中,在默认情况下,一个应用程序内的各个组件(如Activity、BroadcastReceiver、Service)都会在同一个进程(Process)里执行,且由此进程的主线程负责执行。
ActivityThread既要处理Activity组件的UI事件,又要处理Service后台服务工作,通常会忙不过来。为了解决此问题,主线程可以创建多个子线程来处理后台服务工作,而本身专心处理UI画面的事件。
子线程:
用于执行耗时操作,比如 I/O操作和网络请求等。(安卓3.0以后要求耗访问网络必须在子线程种执行)更新UI的工作必须交给主线程,子线程在安卓里是不允许更新UI的。
2.handler只是一种工具,线程代码间承接的作用。我们把耗时操作放在子线程代码中完成,将相关结果,例如参数,传回主线程。从而让主线程执行其他操作,例如更改UI。
3.当然,我们也可以在主线程中实例化handler,在重写的handlemassage()方法中执行相关代码,然后通过handler发送消息给子线程。例如在Activity中通过用户输入某些数据,然后操作这些数据的代码放在子线程中,这样就不会出现响应时间过长的错误。所以说handler的实例化可以在UI线程也可以在子线程。
4.在子线程中创建handler,的步骤:
1 Looper.prepare()创建Looper对象,同时他会自动创建消息队列MessageQueue对象,就像它的名字一样,它的作用就是不断地从消息队列中取出消息,并将其给对应的Handler处理。
2.创建Handler实例,重写handlemassage()
3.调用Looper的loop()启动Looper
- 学习总结——android的消息机制handler
- Android的消息机制—Handler机制
- Android 消息机制 Handler总结
- android的消息机制——Handler机制
- android的消息机制——Handler机制
- android的消息机制——Handler机制
- android的消息机制——Handler机制
- android学习之——Handler消息传递机制
- 【Android学习】消息机制Handler
- Android的异步消息处理机制---Handler机制总结
- Android的消息机制——Handler的工作过程
- android的消息处理机制——Looper,Handler,Message
- Android的消息处理机制——looper&handler&Message
- android的消息处理机制——Looper,Handler,Message
- Android的消息处理机制——Looper,Handler,Message
- android的消息处理机制——Looper,Handler,Message
- android的消息处理机制——Looper,Handler,Message
- android的消息处理机制——Looper,Handler,Message
- js 转换时间戳的写法
- “国产最长寿手机”,金立靠什么?
- 支付宝六一强加“宝宝” 你拍砖还是点赞?
- Uber获35亿美元投资,无人驾驶汽车竞赛持续升级|智驾周刊
- 再说AI会威胁人类,一定是你没看这些|AI科技评论周刊
- 学习总结——android的消息机制handler
- 你离能够拥有一个“强AI”女友还有多久?让专家告诉你
- Java中throws和throw的区别讲解
- Redis--连接池
- linux vim学习笔记
- 微服务实战(一):微服务架构的优势与不足
- 考试总结10
- 第九周——项目二 “遍历二叉树”
- linux进程性能数据检测