Android中的UI是线程不安全的,也就是说,如果要更新应用程序里的UI 元素,则必须在主线程中进行,否则就会出现异常。在这里介绍两个方法来解决这个问题
解析异步处理机制
Android中的异步消息处理主要分为四个部分,Message、Handler、MessageQueue、Looper。
1.Message 是在线程之间传递的消息,它可以在内部携带少量的消息,用于在不同线程之间交换数据。
2.Handler 顾名思义就是处理者的意思,它主要是用来发送和处理消息的。
3.MessageQueue 是消息队列的意思,它主要是用于存放所有通过Handler发送的消息。这部分消息会一直存在于消息队列中,等待被处理。每个线程只有一个消息队列对象。
4.Looper 是每个线程中消息队列的管家,调用其loop()方法后,就会进入到一个无限循环中,然后每发现消息队列中有一条消息,就会将它取出,并传递到Handler的handleMessage()方法中,每个线程也只会有一个Looper对象。
定义一个点击事件,使得点击时,服务可以改变UI中的内容
package com.example.administrator.myhandlerapplication;
import android.app.Activity;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity {
public static final int UPDATE_TIME=1;
private int count=60;
private Button mButton;
private Button mButtonMainsend;
private TextView mTextView;
//定义一个内部类Handle
private Handler handler=new Handler(){
public void handleMessage(Message msg){
switch (msg.what){
case UPDATE_TIME
//在这里进行UI操作
String time= (String) msg.obj;
mButton.setText(time);
if (count>0){
try {
Thread.sleep(1000);
}