zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    服务管理命令
    软件管理
    Qt软件打包与发布(windeployqt工具)
    03
    第一章 BP神经网络
    代理模式 与 Spring AOP
    java 回调机制
    HashTable 实现
    实现Singleton模式
    BST 汇总
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/4583681.html
Copyright © 2011-2022 走看看