Android学习笔记——Handler(一)

使用Handler管理线程(转)

步骤:

1. 申请一个Handler对象

Handler handler = new Handler();

2. 创建一个线程

{继承Thread类或者实现Runnable这个接口}

使用Runnable创建一个内部匿名类对象updateThread(要复写run方法)

3. 使用handler的post方法将线程加入到线程队列中

handler.post(updateThread);

4. 使用handler的removeCallbacks方法移出updateThread线程

注意:如果线程从线程队列中出来被执行后,则队列中就不在有线程

因此如果线程在被执行后没有方法将其再次加入到队列中,则无需使用removeCallbacks

线程走出线程队列有两种情况:

一种是被执行,此时要执行run方法

一种是使用removeCallbacks方法,此时线程不被执行,因此不调用run

5. 使用handler的postDelayed方法延时将线程加入到队列中

handler.postDelayed(updateThread,3000)

以下代码是MainActivity.java中的代码

package com.example.handler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    //声明两个按钮控件
    private Button StartButton = null;
    private Button EndButton = null;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //根据控件的ID得到代表控件的对象,并为这两个按钮设置相应的监听器
        StartButton = (Button)findViewById(R.id.StartButton);
        StartButton.setOnClickListener(new  StartButotnListener());
        EndButton = (Button)findViewById(R.id.EndButton);
        EndButton.setOnClickListener(new  EndButtonListener());
    }
    
    class StartButotnListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            handler.post(updateThread);
        }
    }
    
    class EndButtonListener implements OnClickListener{

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            handler.removeCallbacks(updateThread);
        }
    }
    //创建一个Handler对象
    Handler handler = new Handler();
    //将要执行的操作下载线程对象的run方法当中
    Runnable updateThread = new Runnable(){
        
        public void run(){
            System.out.println("UpdateThread");
            //在run方法内部,执行postDelayed或者是post方法
            handler.postDelayed(updateThread,3000);
        }
    };
}

以下代码是activity_main.xml中的代码

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    
    
    <Button
        android:id="@+id/StartButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Start"
        />
    
    <Button
        android:id="@+id/EndButton"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="End"
        />

</LinearLayout>
原文地址:https://www.cnblogs.com/tonglin0325/p/4583681.html