从mms源码看IM应用的架构<二>

本文探讨了Android即时通讯应用mms如何利用Action和IntentService架构处理后台任务。Action作为耗时任务的逻辑载体,IntentService负责在单独线程中执行任务。ActionMonitor则维护Action的状态,便于与外界交互。该架构使得复杂的后台任务管理变得有序。

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

Action+ IntentService架构

  这一部分给大家总结一下mms里面对于后台任务的处理。正常情况下,一个互联网应用可能会涉及到n多的后台任务要运行,短信应用也不例外,例如插入短信到数据库,删除短信,标记为已读,发送短信,接收短信,下载彩信等。这些都是耗时任务,并且他们之间有些还有先后顺序要求,如果没有一个良好的后台任务管理框架,拿维护起来可就要了亲命了。

  这里我们就来看一下mms应用中的“Action+IntentService架构”是怎么解决这个问题的。

先简单看一下Action:

public abstract class Action implements Parcelable {
   ..........................................
    public void start() {
        DataModel.startActionService(this);
    }
    //该Action要执行的具体后台任务放在这里,该方法需要我们继承的
    //Action子类实现
    protected Object executeAction() {
        return null;
    }

    ..........................................

    //需要在该Action之后执行的Action放到mBackgroundActions中,在该Action执行完
    //之后会将这些mBackgroundActions取出来执行
    private final List<Action> mBackgroundActions = new LinkedList<Action>();
    protected void requestBackgroundWork(final Action backgroundAction) {
    	LogUtil.i(TAG, "requestBackgroundWork");
        mBackgroundActions.add(backgroundAction);
    }
    protected Bundle doBackgroundWork() throws DataModelException {
        return null;
    }
    ..........................................

}
    我们大致上就可以了解Action是什么了?简单的来说,可以理解成一个Runnable,在executeAction方法中是具体的后台任务逻辑,类似于run方法。但显然 Action比Runnable复杂一些,多维护了一个mBackgroundActions列表,他是一个List<Action>,维护的是需要在该Action执行之后再执行的Action,当然这些都是由Action对象本身维护和触发,是典型的面向对象的设计。这样的设计无疑给繁杂的后台任务维护指明了一条简单清晰的框架:谁关联谁维护。这样就不需要我们整体上再维护Action队列来决定先后顺序了,是一个非常不错的设计。

 我们再来以短信发送过程为例来说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值