android的service、handler、asyntask

本文详细解析Android应用中的服务、AsyncTask和Handler机制,包括本地服务与远程服务的区别、AsyncTask的使用场景及原理、Handler的工作流程与线程间通信方式,旨在帮助开发者更深入地理解Android应用后台处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看的,记录下。

1.service

服务,后台运行,无界面。因为对linux进程/线程机制比较熟悉,以前一直以为是起了一个类似后台进程/线程的东东在那跑,其实不是。

local service,也就是一个app内的service是运行在activty主线程,因此,如果它要做比较耗时的或者会导致阻塞的任务,要在service起一个线程来做。

remote service,也就是不同app的service,是运行在独立的进程。

service内部的实现机制不是很理解,待研究。

2.asyntask

异步任务。相对于起一个子线程的方法,asyntask类已经封装了基本的实现,只需要创建对象就行,相当于系统已经为你做好了准备工作。

3.handler

Handler 是用来干什么的?
1)执行计划任务,可以在预定的时间执行某些任务,可以模拟定时器

2)线程间通信。在Android的应用启动时,会创建一个主线程,主线程会创建一个
消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中
创建的Handler 对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android
要求在UI线程中更新界面,因此,可以通过该方法在其它线程中更新界面。

大概的实现原理:

一个acticty对应一个消息队列,对应有一个looper来管理这个消息队列。创建handler的时候,会指定关联到哪个looper,并且注册looper处理handler发过来的消息的回调函数。

Handler handler = new Handler(Looper.getMainLooper()) { 

        @Override
        public void handleMessage(Message msg) {
 
        。。。。。。
 
                }
    };

注意,如果new Handler()无参,则默认传入的是调用者activity的looper。

这样就把handler跟looper关联起来,当通过handler发消息:

handler.sendEmptyMessage(CLOSE_LIGHT);

就会发到looper所管理的消息队列。looper会循环从消息队列取消息出来处理,当要处理的消息是handler发过来的,就调用之前注册的处理函数进行处理。

通过这种机制,能实现做完某些工作发通知,也能实现线程间的通信。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值