`

android:Handler整理总结 收藏

 
阅读更多
android:Handler整理总结 收藏
首先声明,以下是我转载整理的。

感谢

http://blog.csdn.net/Android_Tutor/archive/2010/05/08/5568806.aspx

http://www.pocketdigi.com/20100814/45.html

这些朋友的共享!

当我们在处理下载或是其他需要长时间执行的任务时,如果直接把处理函数放Activity的OnCreate或是OnStart中,会导致执行过程中整个Activity无响应,如果时间过长,程序还会挂掉。Handler就是把这些功能放到一个单独的线程里执行,与Activity互不影响。

我们简单用例子来说明:

小实例一:5秒钟更新一下Title(标题),如图:



代码如下:

view plaincopy to clipboardprint?
package com.android.tutor;  
 
import java.util.Timer;  
import java.util.TimerTask;  
import android.app.Activity;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
 
public class HandlerDemo extends Activity {  
 
    // title为setTitle方法提供变量,这里为了方便我设置成了int型  
    private int title = 0;  
 
    private Handler mHandler = new Handler() {  
 
        public void handleMessage(Message msg) {  
            switch (msg.what) {  
            case 1:  
                updateTitle();  
                break;  
            }  
        };  
    };  
 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
 
        Timer timer = new Timer();  
        timer.scheduleAtFixedRate(new MyTask(), 1, 5000);  
    }  
 
    private class MyTask extends TimerTask {  
        @Override 
        public void run() {  
 
            Message message = new Message();  
            message.what = 1;  
            mHandler.sendMessage(message);  
 
        }  
    }  
 
    public void updateTitle() {  
 
        setTitle("Welcome to Mr Wei's blog " + title);  
        title++;  
    }  

package com.android.tutor;

import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;

public class HandlerDemo extends Activity {

// title为setTitle方法提供变量,这里为了方便我设置成了int型
private int title = 0;

private Handler mHandler = new Handler() {

public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
updateTitle();
break;
}
};
};

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Timer timer = new Timer();
timer.scheduleAtFixedRate(new MyTask(), 1, 5000);
}

private class MyTask extends TimerTask {
@Override
public void run() {

Message message = new Message();
message.what = 1;
mHandler.sendMessage(message);

}
}

public void updateTitle() {

setTitle("Welcome to Mr Wei's blog " + title);
title++;
}
}

小实例二:用Handler更新进度条ProgressBar ;如图:当按开始按钮时,进度条会每隔500毫秒加1,直到加到100或者按停止时停止




代码:

view plaincopy to clipboardprint?
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;  
import android.widget.ProgressBar;  
 
public class main extends Activity {  
    /** Called when the activity is first created. */ 
    ProgressBar pb1;  
    Handler handle = new Handler();  
    // 新建一个Handler对象  
    Button b1;  
    Button b2;  
 
    @Override 
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        pb1 = (ProgressBar) findViewById(R.id.pb1);  
        pb1.setProgress(0);  
        b1 = (Button) findViewById(R.id.b1);  
        b1.setOnClickListener(b1Lis);  
        b2 = (Button) findViewById(R.id.b2);  
        b2.setOnClickListener(b2Lis);  
 
    }  
 
    private OnClickListener b1Lis = new OnClickListener() {  
 
        @Override 
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            handle.post(add);  
            // 开始执行add  
        }  
 
    };  
    private OnClickListener b2Lis = new OnClickListener() {  
 
        @Override 
        public void onClick(View v) {  
            // TODO Auto-generated method stub  
            handle.removeCallbacks(add);  
            // 停止执行  
            pb1.setProgress(0);  
        }  
 
    };  
    int pro = 0;  
    Runnable add = new Runnable() {  
        // 定义add  
        @Override 
        public void run() {  
            // TODO Auto-generated method stub  
            pro = pb1.getProgress() + 1;  
            pb1.setProgress(pro);  
            setTitle(String.valueOf(pro));  
            if (pro < 100) {  
                handle.postDelayed(add, 500);  
                // 如果进度小于100,,则延迟500毫秒后重复执行add  
            }  
 
        }  
 
    };  
 

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;
import android.widget.ProgressBar;

public class main extends Activity {
/** Called when the activity is first created. */
ProgressBar pb1;
Handler handle = new Handler();
// 新建一个Handler对象
Button b1;
Button b2;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
pb1 = (ProgressBar) findViewById(R.id.pb1);
pb1.setProgress(0);
b1 = (Button) findViewById(R.id.b1);
b1.setOnClickListener(b1Lis);
b2 = (Button) findViewById(R.id.b2);
b2.setOnClickListener(b2Lis);

}

private OnClickListener b1Lis = new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.post(add);
// 开始执行add
}

};
private OnClickListener b2Lis = new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
handle.removeCallbacks(add);
// 停止执行
pb1.setProgress(0);
}

};
int pro = 0;
Runnable add = new Runnable() {
// 定义add
@Override
public void run() {
// TODO Auto-generated method stub
pro = pb1.getProgress() + 1;
pb1.setProgress(pro);
setTitle(String.valueOf(pro));
if (pro < 100) {
handle.postDelayed(add, 500);
// 如果进度小于100,,则延迟500毫秒后重复执行add
}

}

};

}



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wufenglong/archive/2010/08/27/5843513.aspx
分享到:
评论

相关推荐

    Android:Handler的post()方法和Thread的start()方法执行Thread的run()方法的区别

    import android.os.Handler; import android.app.Activity; import android.view.Menu; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { ...

    android_Handler整理总结

    Title: Android Handler 深入理解与应用 在Android开发中,Handler机制是处理异步消息传递的关键组件,主要用于在不同的线程之间进行通信,尤其是主线程与工作线程之间的交互。当我们面临需要长时间运行的任务,如...

    Android:Handler学习实例1

    Android中Handler的学习实例,在本示例中,在主线程外开启子线程(使用匿名内部类Runnable),使用Handler中的Message传递消息(高效),操作一个ProgressBar的进度。适合初学者学习和了解Handler以及ProgressBar的...

    Android源代码:HandlerDemo

    在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI更新操作的正确执行。本项目“Android源代码:HandlerDemo”将深入探讨`Handler`机制及其在多线程环境中的应用。 ...

    Android:Handler学习实例2(HandlerThread、Bundle传递参数)

    HandlerThread handlerThread = new HandlerThread("handler_thread"); //在使用HandlerThread的getLooper()方法之前,必须先调用该类的start()方法,否则获得的值为空值; handlerThread.start(); //创建...

    Android的Handler使用方法总结

    Android的Handler使用方法总结,不错的文档,跟大家分享分享

    Android_Handler详解(一)

    总结起来,Handler是Android中进行线程间通信的重要工具,合理使用它可以有效地提升应用的性能和用户体验。在实际开发中,应结合使用Handler、Looper和Thread,以实现高效的多线程编程。在后续章节,我们将更深入地...

    Android Studio通过Handler制作简单的计时器

    在`onCreate`方法中初始化视图和Handler: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tvTimer ...

    模拟Android Handler机制Demo

    【Android Handler机制】是Android应用程序中用于线程间通信的核心组件,它与Looper和Message紧密配合,实现消息的发送、处理以及线程间的同步。在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为...

    Android中handler的使用

    总结来说,Handler是Android中处理多线程和UI同步的核心工具,理解其工作原理和使用方法对于开发高效、稳定的Android应用至关重要。通过熟练掌握Handler,开发者可以更好地控制应用的执行流程,确保UI响应性和性能。...

    Android项目设计与开发:Handler.ppt

    嵌入式Android项目设计与开发 第七章 多线程 ——(3)UI线程冲突 多线程 即使Android可以使用线程, 但规定不能使用子线程修改主线程的内容。 多线程 可以考虑在子线程中使用runOnUiThread重新载入UI线程,并干预...

    Android Handler Message一些知识总结的Demo

    以前刚接触的Handler的时候,感觉总是很困惑,对Handler原理也是一知半解,现在对Handler知识点总结一下,写了一个Demo,供参考。http://blog.csdn.net/yalinfendou博客中有详细介绍……

    Android利用handler在线程之间传递代码

    总结来说,Handler机制是Android多线程编程的关键工具之一,它使得开发者能够方便地在线程间传递信息,实现异步处理,确保UI线程不被阻塞,提升用户体验。熟练掌握Handler的使用,对任何Android开发者都至关重要。

    android 中Handler 的几种写法

    在Android开发中,`Handler`是一个至关重要的组件,它用于在主线程中处理来自其他线程的消息,确保UI更新和事件处理的同步性。本文将详细介绍`Handler`的几种常见写法,以及如何使用`Handler.Callback`进行消息处理...

    android-Handler的使用

    【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...

    Android_Handler消息处理机制

    总结起来,Android的Handler消息处理机制是实现线程间通信和异步任务处理的核心工具,它确保了对UI的修改总是在正确的线程(主线程)中进行,避免了因不恰当的线程操作导致的应用程序崩溃。理解和熟练掌握这一机制,...

    android demo,使用Handler的postDelay,Runnable run实现延时3秒的splash。

    本示例中的“android demo”就是关于如何利用Handler的`postDelayed`方法和`Runnable`接口来实现一个延时3秒的Splash Screen。下面将详细解释这个过程以及涉及的技术点。 1. **Handler**: Handler是Android中处理...

    android中Handler的使用方法和总结

    Android 中 Handler 的使用方法和总结 Handler 是 Android 中的一种非常重要的组件,它起到了十分重要的作用。Handler 主要用于异步消息的处理,当发出一个消息之后,首先进入一个消息队列,发送消息的函数即刻返回...

    Android_Handler的线程队列Demo

    在Android应用开发中,Handler、Looper和Message是实现线程间通信的重要机制。这个"Android_Handler的线程队列Demo"旨在演示如何有效地利用Handler来处理线程间的通信,特别是主线程(UI线程)与工作线程之间的交互...

    【Android开发入门】Android线程之Handler

    1. 创建Handler:在需要发送消息的线程(通常为主线程)中创建Handler实例。 ```java Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // 这里处理消息,可以更新UI } }...

Global site tag (gtag.js) - Google Analytics