在Android中使用Handler和Thread线程执行后台操作

大家都知道,在PC上的应用程序当需要进行一些复杂的数据操作,但不需要界面UI的时候 ,我们会为应用程序专门写一个线程去执行这些复杂的数据操作。通过线程,可以执行例如 :数据处理、数据下载等比较耗时的操作,同时对用户的界面不会产生影响。在Android应用 程序开发中,同样会遇到这样的问题。当我们需要访问网络,从网上下载数据并显示在我们 的UI上时,就会启动后台线程去下载数据,下载线程执行完成后将结果返回给主用户界面线 程。

对于线程的控制,我们将介绍一个Handler类,使用该类可以对运行在不同线程中的多个 任务进行排队,并使用Message和Runnable对象安排这些任务。在javadoc中,对Handler是这 样解释的:Handler可以发送和处理消息对象或Runnable对象,这些消息对象和Runnable对象 与一个线程相关联。每个Handler的实例都关联了一个线程和线程的消息队列。当创建了一个 Handler对象时,一个线程或消息队列同时也被创建,该Handler对象将发送和处理这些消息 或Runnable对象。

下面有几种对Handler对象的构造方法需要了解一下:

a、如果new一个无参构造函数的Handler对象,那么这个Handler将自动与当前运行线程相 关联,也就是说这个Handler将与当前运行的线程使用同一个消息队列,并且可以处理该队列 中的消息。

private Handler handler = new Handler();

我们做这样一个实验,在主用户界面中创建一个带有无参构造函数的Handler对象,该 Handler对象向消息队列推送一个Runnable对象,在Runnable对象的run函数中打印当前线程 Id,我们比较主用户界面线程ID和Runnable线程ID是否相同。具体代码如下:

HandlerTest01

public class HandlerTest01 extends Activity {    @Override    

public void onCreate(Bundle savedInstanceState) {        super.onCreate

(savedInstanceState);        setContentView(R.layout.main);

System.out.println("Activity ---> " + Thread.currentThread().getId());        handler.post(r);    }

private Handler handler = 

new Handler();    private Runnable r = new Runnable() {        

@Override        public void run() {            try {           

     Thread.sleep(2000);            } catch (InterruptedException e) {                // TODO Auto-generated catch block                

e.printStackTrace();            }            System.out.println

("Runnalbe ---> " + Thread.currentThread().getId());        }    

};}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索对象
, 线程
, handler
, android 后台服务
, 消息队列
, runnable
, android handler
, android 后台运行
, c++ 线程 后台 界面
, 一个
, android的handler
, android多线程下载
Handler+线程
android handler 线程、android子线程handler、android线程的handler、android 线程延迟执行、android 线程顺序执行,以便于您获取更多的相关知识。

时间: 2024-08-04 10:18:41

在Android中使用Handler和Thread线程执行后台操作的相关文章

消息-Android中的handler机制

问题描述 Android中的handler机制 请教大神,handler发消息可以从这个activity发送到另外一个activity吗? 解决方案 Handler 变量的定义,一般在一个 Activity 中,想要在两个 Activity 之间通过 Handler 变量,也就是说两个 Activity 都必须能看到此 Handler 变量. 这样的实现方式,就算是能实现,也不好! Activity 之间,还是通过 Receiver,如:BroadcastReceiver 来进行通讯比较好. 解

Android中断并重启一个Thread线程的简单方法

这里简单的总结下(大概思路,没调试,可能会有错!): MyThread.java pulbic class MyThread implemets Thread{ @overide public void run{ while(!Thread.interrputed()){ } } } xxx.java Thread mThread = new MyThread(); public static void startThread(){ mThread = new MyThread(); mThre

Android中使用Handler及Countdowntimer实现包含倒计时的闪屏页面

上一篇博文<Android中Handler使用浅析>通过实现倒计时闪屏页面的制作引出了Handler的使用方法以及实现原理,博文末尾也提到了实现过程中的Bug,有兴趣的朋友可以点击链接回去看看.今天通过使用Handler以及CountDownTimer来实现完整版的倒计时闪屏(不会出现在退出闪屏页后,依然会跳转页面的现象). 1. 实现效果如下: 1.1  正常进入跳转的效果以及log显示 1.2  倒计时未结束时退出以及log显示 对比上篇博文的实现,退出后计时停止且不会再跳到新的界面 2.

Android中的AsyncHttpClient框架下怎么post后台数据?

问题描述 Android中的AsyncHttpClient框架下怎么post后台数据? 下面是后台拍的代码 public void baseInfo(Context context,RequestParams params, final HttpUtil.ReponseCallback callback){ HttpUtil.get(context,spellUrl(baseInfo_url), params, new TextHttpResponseHandler() { @Override

Android中关于Handler的若干思考

本文包括与Handler有关的以下问题: (1)Handler的作用 (2)为什么Android中要设计为只能在UI线程中去更新UI呢? (3)Handler的两个异常 (4)Handler.Looper MessageQueue之间的关系(源码角度) (5)跟线程相关的Handler,即HandlerThread(源码角度分析) (6)主线程往子线程发消息   一.Handler的作用: (1)在非UI线程中完成耗时操作,在UI线程中去更新UI. (2)可以在主线程中发送延时消息.   二.为

Android中主线程与子线程之间相互通信教程

有时候,我们也可能碰到这样子的一种需求:需要主线程来向子线程发送消息,希望子线程来完成什么任务.如果这样子应该怎么做呢?这就是这篇文章将要讨论的内容. 一.HandlerThread类 主线程发送消息给子线程,通常思维逻辑就是:其实很简单,在主线程中实例化一个Handler,然后让他与子线程相关联(只要它与子线程的Looper相关联即可),这样子它处理的消息就是该子线程中的消息队列,而处理的逻辑都是在该子线程中执行的,不会占用主线程的时间.那么我们就来实现一下,看看这样子到底行得通还是行不通.新

深入理解Android中的Handler异步通信机制_Android

一.问题:在Android启动后会在新进程里创建一个主线程,也叫UI线程(非线程安全)这个线程主要负责监听屏幕点击事件与界面绘制.当Application需要进行耗时操作如网络请求等,如直接在主线程进行容易发生ANR错误.所以会创建子线程来执行耗时任务,当子线程执行完毕需要通知UI线程并修改界面时,不可以直接在子线程修改UI,怎么办? 解决方法:Message Queue机制可以实现子线程与UI线程的通信. 该机制包括Handler.Message Queue.Looper.Handler可以把

深入理解Android中的Handler异步通信机制

一.问题:在Android启动后会在新进程里创建一个主线程,也叫UI线程(非线程安全)这个线程主要负责监听屏幕点击事件与界面绘制.当Application需要进行耗时操作如网络请求等,如直接在主线程进行容易发生ANR错误.所以会创建子线程来执行耗时任务,当子线程执行完毕需要通知UI线程并修改界面时,不可以直接在子线程修改UI,怎么办? 解决方法:Message Queue机制可以实现子线程与UI线程的通信. 该机制包括Handler.Message Queue.Looper.Handler可以把

Android中的Service 与 Thread 的区别[转]

很多时候,你可能会问,为什么要用 Service,而不用 Thread 呢,因为用 Thread 是很方便的,比起 Service 也方便多了,下面我详细的来解释一下. 1). Thread:Thread 是程序执行的最小单元,它是分配CPU的基本单位.可以用 Thread 来执行一些异步的操作. 2). Service:Service 是android的一种机制,当它运行的时候如果是Local Service,那么对应的 Service 是运行在主进程的 main 线程上的.如:onCreat