• 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开发 使用 adb logcat 显示 Android 日志
    【嵌入式开发】向开发板中烧写Linux系统-型号S3C6410
    C语言 结构体相关 函数 指针 数组
    C语言 命令行参数 函数指针 gdb调试
    C语言 指针数组 多维数组
    Ubuntu 基础操作 基础命令 热键 man手册使用 关机 重启等命令使用
    C语言 内存分配 地址 指针 数组 参数 实例解析
    CRT 环境变量注意事项
    hadoop 输出文件 key val 分隔符
    com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Too many connections
  • 原文地址:https://www.cnblogs.com/tonglin0325/p/4583681.html
Copyright © 2020-2023  润新知