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>

 

你可能感兴趣的:(Android学习)