@Override protected void onDestroy() { mHandler.removeCallbacks(mRunnable); super.onDestroy(); }
Android Handler的使用,在讲Handler之前,我们先提个小问题,就是如何让程序5秒钟更新一下Title.
首先我们看一下习惯了Java编程的人,在不知道Handler的用法之前是怎么样写的程序,代码如下所示:
package com.android.tutor; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.os.Bundle; public class HandlerDemo extends Activity { // title为setTitle方法提供变量,这里为了方便我设置成了int型 private int title = 0; 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() { setTitle("Welcome to Mr Wei's blog " + title); title++; } } }
然而当我们执行程序,并不能达到我们预期的效果,所以Android引进了Handler这个特殊的类,可以说它是Runnable和Activity交互的桥梁,所以我们只要在run方法中发送Message,而在Handler里,通过不同的Message执行不同的任务。
所以我们修改后的代码如下:
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++; } }
--------------------------------------------应该注意的问题---------------------------------------------
我们都知道Hanlder是线程与Activity通信的桥梁,我们在开发好多应用中会用到线程,有些人处理不当,会导致当程序结束时,线程并没有被销毁,而是一直在后台运行着,当我们重新启动应用时,又会重新启动一个线程,周而复始,你启动应用次数越多,开启的线程数就越多,你的机器就会变得越慢。
为了方便大家理解,我写一个简单的Demo.功能就是每2秒中将应用的Title更换一次。具体步骤如下:
第一步:新建一个Android工程命名为ThreadDemo
第二步:修改ThreadDemo.java,代码如下:
package com.tutor.thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; public class ThreadDemo extends Activity { private static final String TAG = "ThreadDemo"; private int count = 0; private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { public void run() { // 为了方便 查看,我们用Log打印出来 Log.e(TAG, Thread.currentThread().getName() + " " + count); count++; setTitle("" + count); // 每2秒执行一次 mHandler.postDelayed(mRunnable, 2000); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 通过Handler启动线程 mHandler.post(mRunnable); } }
第三步:运行上述工程,查看运行效果:
当然上面不是重点,退出应用时,线程还在跑,打开Logcat视窗或者cmd终端查看,如下(刚吃了午餐回来,线程还在跑着):
当我们再次启动应用时,会重新启动一个新的线程,如下图所示:
所以我们在应用退出时,要将线程销毁,我们只要在Activity中的,onDestory()方法处理一下就OK了,如下代码所示:
所以ThreadDemo.java的完整代码如下:
package com.tutor.thread; import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.util.Log; public class ThreadDemo extends Activity { private static final String TAG = "ThreadDemo"; private int count = 0; private Handler mHandler = new Handler(); private Runnable mRunnable = new Runnable() { public void run() { // 为了方便 查看,我们用Log打印出来 Log.e(TAG, Thread.currentThread().getName() + " " + count); count++; setTitle("" + count); // 每2秒执行一次 mHandler.postDelayed(mRunnable, 2000); } }; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 通过Handler启动线程 mHandler.post(mRunnable); } @Override protected void onDestroy() { // 将线程销毁掉 mHandler.removeCallbacks(mRunnable); super.onDestroy(); } }
相关推荐
【Android Handler机制】是Android应用程序中用于线程间通信的核心组件,它与Looper和Message紧密配合,实现消息的发送、处理以及线程间的同步。在Android应用开发中,尤其是涉及到UI更新时,Handler机制显得尤为...
【Android Handler 使用详解】 Handler 是 Android 平台中用于处理线程间通信的关键组件,尤其在涉及 UI(用户界面)更新时,它扮演着至关重要的角色。在 Android 应用程序启动时,系统会默认创建一个主线程,也...
通过分析这个`demo`,开发者可以更好地理解Android中的多线程通信机制,并学会在自己的项目中正确、有效地使用`Handler`、`Looper`进行线程间通信。这将有助于提高程序的响应性和用户体验,避免因UI操作不在主线程...
Android的Handler使用方法总结,不错的文档,跟大家分享分享
它可以在Android主线程中执行任务,避免了在其他线程中更新UI的操作导致的线程安全问题。Handler主要有两个核心方法:`sendMessage`和`handleMessage`,用于发送和处理消息。但在实现延时任务时,我们通常会使用`...
1. **静态内部类与Handler**:为避免内存泄漏,可以使用静态内部类来创建Handler实例,这样即使外部Activity或Fragment被销毁,Handler也不会持有它们的引用。 2. **弱引用与Handler**:使用WeakReference包裹...
在Android开发中,`Handler`、`Looper`和`Message`是实现线程间通信的重要组件,特别是用于主线程(UI线程)与其他工作线程...在测试中,确保正确地初始化和使用`Handler`,并注意线程安全,可以避免许多潜在的问题。
Android Handler类详解 Android Handler类详解 Android Handler类详解 Android Handler类详解
在Android开发中,`Handler`、`Message`和`Looper`是实现线程间通信的重要机制,特别是当需要在主线程(UI线程)和工作线程之间传递数据时。本示例“Android Handler传值的demo”将帮助我们深入理解这一机制。 `...
在Android开发中,`Handler`是一个至关重要的组件,它用于处理与线程通信相关的任务,尤其是在主线程(UI线程)和工作线程之间。`Handler`、`Looper`和`Message`三者共同构成了Android的消息传递机制。下面将详细...
为了解决这个问题,我们通常将耗时操作放在后台线程,而使用Handler来通知主线程更新UI。 - **保持UI流畅**:通过Handler,后台线程可以异步执行任务,不会阻塞主线程,确保用户界面的流畅性。 - **同步更新UI**:...
总结来说,Handler是Android中处理多线程和UI同步的核心工具,理解其工作原理和使用方法对于开发高效、稳定的Android应用至关重要。通过熟练掌握Handler,开发者可以更好地控制应用的执行流程,确保UI响应性和性能。...
通过理解以上知识点,开发者可以灵活地在Android应用中使用`Handler`进行线程间通信,高效地处理异步任务和UI更新。在实际开发中,结合`Handler`、`Looper`、`Thread`以及`Runnable`,可以构建出复杂而稳定的多线程...
在Android应用开发中,Handler、Runnable和Looper是三个非常重要的组件,它们构成了Android的消息处理机制。这个机制使得UI线程可以非阻塞地处理来自其他线程的消息,从而避免了UI冻结,提升了用户体验。下面我们将...
在Android开发中,Handler、Looper和Message是实现线程间通信的重要组件,它们共同构建了Android的消息处理机制。本文将详细分析Android Handler消息处理的顺序,以及如何利用这些组件进行异步操作。 首先,理解...
本文将深入探讨`Handler`的工作原理、如何使用以及它在Android应用程序中的实际应用。 `Handler`机制是Android系统为了实现线程间通信而设计的一种模式,主要包含三部分:`Handler`、`Message`和`Looper`。`Handler...
总结来说,这个压缩包文件提供了一个完整的Android应用开发练习案例,涵盖了Handler的使用、图文混排的实现以及服务器端的JSON、MySQL和JSP技术。对于初学者来说,这是一个很好的实践平台,能够帮助他们深入理解...
本知识点将深入探讨Android中的Handler机制,它是Android异步处理和消息传递的核心工具,帮助开发者解决多线程环境下UI更新的问题。 一、Android线程基础 Android系统主要分为两个线程:主线程(UI线程)和工作线程...
本篇文章将深入探讨如何使用Android Handler来模拟进度条更新。 首先,理解Handler、Looper和Message的基本概念: 1. **Handler**:它是消息处理对象,负责发送和处理Message。在主线程中创建Handler实例后,它...
为了解决这个问题,Android提供了一种非阻塞的消息传递机制——Handler。 ## Handler基础概念 ### 什么是Handler? Handler是Android框架中的一个核心组件,它提供了一个非阻塞的消息传递机制。通过Handler,可以...