上一篇文章 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其他功能的使用讲解。