Android-BaseLine框架初识之如何使用(二)

上一篇文章 Android-BaseLine框架初识之网络请求(一)算是一个入门级或者是开篇的介绍,还没看过的朋友请移步去简单认识下。

Ok, 那么Android-BaseLine目前能做什么呢?
1、升级Volley框架, 增加对多附件上传及进度更新回调的支持,增加https支持并且可以动态地切换RequestQueue

2、提供统一的网络请求业务逻辑框架, 使用EventBus和Volley协作完成

3、提供统一的异步耗时任务执行框架, 使用EventBus作为通知中心来协作完成

4、提供日志管理框架, 对日志存储的大小、数量、格式做了规范处理, 支持打印级别的控制等

5、提供全局异常处理框架, 用户崩溃信息可以通过Email及时发送到开发者手中

6、提供统一的数据库访问接口, 支持多线程并发访问

7、SharedPreferences配置文件通过数据库来保存, 使用方法与原生API保持一致

8、基类Activity提供View的注解和事件绑定框架, 以及统一的Toast、ProgressDialog等UI组件

9、基类Adapter, 提供控件复用的管理机制

10、封装数据分页代码提供极其简便的使用方式

11、提供ListView单选多选功能的支持

12、其他


看完了介绍,我们进入本章节的内容

本篇文章会分为两部分

第一部分 讲解如何引入Android-BaseLine框架
第二部分 算是第一篇文章的续集,会讲解如何执行本地耗时任务,你会发现与Android-BaseLine框架初识之网络请求(一)的写法高度的一致,这才是重点


第一部分:如何引入Android-BaseLine框架

ps: Android-BaseLine的源码已经托管到GitHub,查看源码请点击Android-BaseLine

  • 使用AndroidStudio的同学在你的build.gradle中加入如下语句(还在使用Eclipse的同学我只能呵呵了~)
compile 'org.baseline:library:0.0.4'
  • 新建一个Class,比如MyDroid,继承AppDroid,可以没有任何代码,但一定要继承并在AndrodManifest中设置
  • 在AndroidManifest.xml中的application节点设置主题为Android.support.v7.appcompat.R.style#Theme_AppCompat Theme.AppCompat} 或者一个相似的。这列推荐设置Android-BaseLine内置的AppTheme主题,xml文件片段如下
<application android:name=".MyDroid"
        android:allowBackup="true" android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name" android:supportsRtl="true"
        android:theme="@style/AppTheme">
</application>
  • 项目中所有新建的Activity都继承自BasicActivity,Fragment都继承自BasicFragment

完成了这四个步骤,我们就可以像上一篇文章那样开始使用我们的Android-BaseLine框架了。

第二部分:如何执行本地耗时任务
这里我们以Demo的方式讲解

  • 新建一个ModuleTask类,继承自Task。实现父类的构造函数以及重写doInBackground方法,代码如下
public class ModuleTask extends Task {
    public ModuleTask(int taskId, Object subscriber) {
        super(taskId, subscriber);
    }

    @Override
    public Object doInBackground() {
        try {
            Thread.sleep(6 *1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return new InfoResult.Builder().success(true).extraObj("task run over").build();
    }
}

doInBackground方法内部可以实现我们的耗时任务,这里我们使用Thread睡眠了6秒钟来模拟,然后返回该方法的执行结果,我们这里返回一个InfoResult对象。
这里需要说明一下,建议一个项目中的网络请求和具体任务都返回一个标准的结果,以便代码的统一和团队开发的一致性。让我们看下InfoResult的代码

public class InfoResult
{
    private boolean success;
    private String errorCode;
    private String desc;
    private Object extraObj;

    // 这里省去部分代码
}

success:表示具体业务是否成功
errorCode:表示业务失败的错误码
desc:表示业务结果的描述信息
extraObj:用来存储业务处理之后返回的结果
以上4个标准的字段基本就是我们常见的格式了,这里不做过多解释了

  • 调用ModuleTask,还是和上篇文章一样,我们在ModuleLogic里面新建一个方法,代码如下
public class ModuleLogic extends BaseLogic {
    public ModuleLogic(Object subscriber) {
        super(subscriber);
    }
    public void testTask()
    {
        TaskExecutor.getInstance().execute(new ModuleTask(R.id.testTask, this));
    }
}

让我们看下testTask方法,代码就一行,使用TaskExecutor.getInstance()方法获得一个单例的TaskExecutor对象,然后执行它的execute方法。

ModuleTask的构造函数接受两个参数
taskId:和上一篇文一样,表示唯一标示,我们在values目录下新建一个ids.xml,内容如下

<resources>
    <item name="testTask" type="id"/>
</resources>

subscriber:传入this即可

  • Activity中调用testTask方法,我们在新建一个TestActivity继承自BasicActivity,里面加入一个按钮,点击的时候调用testTask方法,代码如下
public class TestActivity extends BasicActivity{
    private ModuleLogic moduleLogic;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        moduleLogic = new ModuleLogic(this);

        // 本地任务
        findViewById(R.id.task_btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showProgress("handling...");
                moduleLogic.testTask();
            }
        });
    }

    @Override
    public void onResponse(Message msg) {
        super.onResponse(msg);
        switch (msg.what)
        {
            case R.id.testTask:
                hideProgress();
                if (checkResponse(msg))
                {
                    InfoResult infoResult = (InfoResult)msg.obj;
                    showToast(infoResult.getExtraObj().toString());
                }
                break;
        }
    }
}

onResponse方法上一篇文章已经已经做过说明,不清楚的同学请看一下Android-BaseLine框架初识之网络请求(一)

至此整个耗时任务的过程就结束了,让我们总结下
1、新建一个类继承Task,重写doInBackground方法,里面处理你的耗时任务
2、ids.xml新建一个id,这里是testTask
3、新建一个类继承BaseLogic,新建一个方法,接受参数(如果需要),执行一行代码

TaskExecutor.getInstance().execute(new ModuleTask(R.id.testTask, this));

4、Activity重写onResponse方法,处理Message即可

至此本篇文章基本结束了,不知道大家有没有发现和Android-BaseLine框架初识之网络请求(一)对于网络请求的代码非常的相似,而且重要的是“模板化”。对于团队开发,最重要的就是怕你写一个回调,我写一个回调,你写一个线程,我写一个线程,最终整个项目没有同一个的风格,面目全非,导致后期灾难性的后果。

好了,本篇的内容就到此结束了,下面会继续给大家带来Android-BaseLine其他功能的使用讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值