Android开发总结(二)消息传递机制—Handle的简单用法

文/程序员男神
前言 今天到常州出差的第二天,看到项目中好多处都用了android的消息传递机制,自己又复习了一遍,做个记录温故而知新吧!

Android开发总结(二)消息传递机制—Handle的简单用法
文章图片
aj 一、基本概念 1、什么是消息机制?
不同线程之间的通信。
2、什么安卓的消息机制
就是 Handler 运行机制。
3、安卓的消息机制有什么用?
避免ANR(Application Not Responding) ,一旦发生ANR,程序就挂了,奔溃了。
4、什么时候会触发ANR?(消息机制在什么时候用?)
以下两个条件任意一个触发的的时候就会发生ANR
在activity中超过5秒的时间未能响应下一个事件
BroadcastReceive超过10未响应
5、造成以上两点的原因
比如网络请求, 大文件的读取, 耗时的计算等都会引发ANR
6、如何避免ANR
首先明白两点:
主线程不能执行耗时操作(避免ANR)
子线程不能直接更新UI界面
7、Android中的Looper , Handler , Message关系简图

Android开发总结(二)消息传递机制—Handle的简单用法
文章图片

二、实现步骤

1、首先new出来一个handle对象,复写handleMessage()方法,用于更新UI,该方法运行在主线程。
2、在需要执行更新UI的地方 sendEmptyMessage() 或者 sendMessage(),通过new一个子线程,在run()方法中执行耗时操作。
3、最后不要忘了.start()。
4、然后在handleMessage里面的switch里面case不同的常量执行相关操作。
实现代码如下:
package com.example.dj.handledemo; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.TextView; import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu; /** *描述:Handle的简单使用 * * Created by dj on 2016/11/24 0024. */public class MainActivity extends AppCompatActivity {private TextView tvHandle; private static final int MSG_UPDATA_TEXT = 0X1123; private static final int MSG_UPDATA_TEXT_TWO = 0X1124; private Handler handler = new Handler() { // 该方法运行在主线程中 // 接收到handler发送的消息,对UI进行操作 @Override public void handleMessage(Message msg) { switch (msg.what) { case MSG_UPDATA_TEXT: tvHandle.setText("更新界面字体"); break; case MSG_UPDATA_TEXT_TWO: tvHandle.setText("更新界面字体第二种"); break; default: break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvHandle = (TextView) findViewById(R.id.tvHandle); tvHandle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { new Thread(new Runnable() { @Override public void run() { // 在此执行耗时工作,执行完毕后调用handler发送消息 try { Thread.sleep(2000); //耗时两秒 //方式一 handler.sendEmptyMessage(MSG_UPDATA_TEXT); //发送消息//方式二 //Message message = Message.obtain(); //message.what = MSG_UPDATA_TEXT_TWO; //handler.sendMessage(message); } catch (InterruptedException e) { e.printStackTrace(); } } }).start(); } }); } }

【Android开发总结(二)消息传递机制—Handle的简单用法】总结
这里就是android消息机制handle的简单用法。
参考文章:http://www.jianshu.com/p/e273c99775a1

    推荐阅读