第三方框架之ThinkAndroid 学习总结(一)
ThinkAndroid是一个免费的开源的、简易的、遵循Apache2开源协议发布的Android开发框架,其开发宗旨是简单、快速的进行Android应用程序的开发,包含Android mvc、简易sqlite orm、ioc模块、封装Android httpclitent的http模块,具有快速构建文件缓存功能,无需考虑缓存文件的格式,都可以非常轻松的实现缓存,它还基于文件缓存模块实现了图片缓存功能,在android中加载的图片的时候,对oom的问题,和对加载图片错位的问题都轻易解决。他还包括了一个手机开发中经常应用的实用工具类,如日志管理,配置文件管理,android下载器模块,网络切换检测等等工具。
项目Github:https://github.com/white-cat/ThinkAndroid
曾经的官网:http://cn.dragonparking.com/?site=thinkandroid.cn&acct=6(可惜因为一些原因已经暂停维护了,maybe is too old to use for now,maybe jar is so large(640kb) anyway~~whatever)~~~~
目前ThinkAndroid主要有以下模块:
MVC模块:实现视图与模型的分离。
ioc模块:android中的ioc模块,完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
数据库模块:android中的orm框架,使用了线程池对sqlite进行操作。
http模块:通过httpclient进行封装http数据请求,支持异步及同步方式加载。
缓存模块:通过简单的配置及设计可以很好的实现缓存,对缓存可以随意的配置
图片缓存模块:imageview加载图片的时候无需考虑图片加载过程中出现的oom和android容器快速滑动时候出现的图片错位等现象。
配置器模块:可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取。
日志打印模块:可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印
下载器模块:可以简单的实现多线程下载、后台下载、断点续传、对下载进行控制、如开始、暂停、删除等等。
网络状态检测模块:当网络状态改变时,对其进行检测。
一、使用ThinkAndroid快速开发框架需要有以下权限:
<!-- 访问互联网权限 根据需要添加-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SDCARD读写权限 根据需要添加 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 网络状态检测权限 根据需要添加-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
配置:
<receiver android:name="com.ta.util.netstate.TANetworkStateReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
<application
android:name="com.ta.TAApplication" >
application必须配置以上格式
二、Activity必须继承TAActivity
三、MVC模块
MVC模块:实现视图与模型的分离。
在onPreOnCreate()方法里实现主要方法;
在onAfterOnCreate()方法中实现对SetTitle的设置;通过实现TAInjectView接口:完成完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
- 实例化TA对象:
TAApplication application = (TAApplication) getApplication();
- 注册Command,Avtivity:
getTAApplication().registerCommand(R.string.testmvccommand, TestMVCCommand.class);
在onAfterSetContentView()中进行行为操作比如点击事件等,通过doActivity进行Activity的跳转;
- 实例化TARequest对象:
TARequest request = new TARequest();
- 实现doCommand()方法,三个参数为text,request对象及TAIReponseListener()方法:
doCommand(R.string.testmvccommand, request, new TAIResponseListener() {
@Override
public void onStart() {
// TODO Auto-generated method stub
showTextView.setText("onStart");
}
@Override
public void onSuccess(TAResponse response) {
// TODO Auto-generated method stub
String tempString = "";
ArrayList<StudyEntity> arrayList = (ArrayList<StudyEntity>) response.getData();
for (int i = 0; i < arrayList.size(); i++) {
StudyEntity studyEntity = arrayList.get(i);
tempString = tempString + studyEntity.toString();
}
showTextView.setText(tempString);
}
@Override
public void onRuning(TAResponse response) {
// TODO Auto-generated method stub
}
@Override
public void onFailure(TAResponse response) {
// TODO Auto-generated method stub
}
@Override
public void onFinish() {
// TODO Auto-generated method stub
}
}, false);
- 在MVC中Command中实现executeCommand()方法,实现Controller的具体需要执行的操作,例子如下:
public class TestMVCCommand extends TACommand {
@Override
protected void executeCommand() {
// TODO Auto-generated method stub
TARequest request = getRequest();
String strJson = (String) request.getData();
ArrayList<StudyEntity> arrayList = new ArrayList<StudyEntity>();
try {
JSONObject jo = new JSONObject(strJson);
JSONArray jsonArray = (JSONArray) jo.get("students");
for (int i = 0; i < jsonArray.length(); ++i) {
JSONObject o = (JSONObject) jsonArray.get(i);
StudyEntity studyEntity = new StudyEntity();
studyEntity.setName(o.getString("name"));
studyEntity.setAge(o.getInt("age"));
arrayList.add(studyEntity);
System.out.println("name:" + o.getString("name") + "," + "age:" + o.getInt("age"));
}
} catch (JSONException e) {
e.printStackTrace();
} finally {
sendSuccessMessage(arrayList);
}
}
}
四、ioc模块
- 完全注解方式就可以进行UI绑定、res中的资源的读取、以及对象的初始化。
五、SQLITE 模块
- android中的orm框架,使用了线程池对sqlite进行操作。
public class ThinkAndroidDemoActivity extends TAActivity { TASQLiteDatabasePool sqlitePool = getTAApplication()
.getSQLiteDatabasePool();
TASQLiteDatabase sqliteDatabase=sqlitePool.getSQLiteDatabase();
//使用中
sqliteDatabase.insert(entity);
sqlitePool.returnSQLiteDatabase(sqliteDatabase); }
实例化sqLiteDatabase 对象,并通过 getTAApplication().getSQLiteDatabasePool().getSQLiteDatabase()获取该对象;
if (sqLiteDatabase != null) {
if (sqLiteDatabase.hasTable(TestDataEntity.class)) {
sqLiteDatabase.dropTable(TestDataEntity.class);
}
sqLiteDatabase.creatTable(TestDataEntity.class);
}
框架中完善增删改查的体系:
具体参加TASQLiteDatabase.class,what you want is ready to ues.
六、打印模块
可以较快的轻易的是实现日志打印,支持日志打印的扩展,目前支持对sdcard写入本地打印、以及控制台打印 添加打印器 TALogger.addLogger(new TAPrintToFileLogger()); 调用打印 TALogger.addLogger(new TAPrintToFileLogger()); TALogger.d(TestActivity.this, "test");
七、配置模块
可以对简易的实现配对配置的操作,目前配置文件可以支持Preference、Properties对配置进行存取
private void testConfig() {
TAIConfig config;
/ confing有两种Preference和properties
config = getTAApplication().getConfig(TAApplication.PROPERTIESCONFIG);
TestDataEntity testDataEntity = new TestDataEntity();
testDataEntity.setName("Think Android ADD");
testDataEntity.setB(true);
Character c1 = new Character('c');
testDataEntity.setC(c1);
testDataEntity.setD(10);
testDataEntity.setDate(new Date());
testDataEntity.setF(2f);
testDataEntity.setI(123);
// 保存配置
config.setConfig(testDataEntity);
// 读取配置
TestDataEntity dataEntity = config.getConfig(TestDataEntity.class);
showViewTextView.setText(dataEntity.toString());
}
八、网络状态检测模块
- 当网络状态改变时,对其进行监测。
TANetworkStateReceiver.registerObserver(new TANetChangeObserver()
{
@Override
public void onConnect(netType type)
{
// TODO Auto-generated method stub
super.onConnect(type);
Toast.makeText(TestActivity.this, "onConnect",
Toast.LENGTH_SHORT).show();
} @Override
public void onDisConnect()
{
// TODO Auto-generated method stub
super.onDisConnect();
Toast.makeText(TestActivity.this, "onDisConnect",
Toast.LENGTH_SHORT).show();
}
});
PS: 需要开启权限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 配置:
<receiver android:name="com.ta.util.netstate.TANetworkStateReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
第三方框架之ThinkAndroid 学习总结(一)的更多相关文章
- 第三方框架之ThinkAndroid 学习总结(二)
上文记录了一些ThinkAndroid常用的模块,本文继续介绍ThinkAndroid中的网络化模块. 按照惯例先上Github原文地址:https://github.com/white-cat/Th ...
- ios开发学习笔记040-autolayout 第三方框架Masonry
不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...
- android第三方框架 xlistview 的使用
如今上拉刷新,下拉加载更多已经是浩如烟海的app的标配了 最近正好有相关的需要就去学习了一下,还是那句老话凡事都靠自己来 搞实在不是一件好事,费时费力不说可能还是在做无用功,不过自己研究学习 还是很有 ...
- 使用第三方框架 Masonry 实现自动布局
使用第三方框架 Masonry 实现自动布局 时间:2015-02-10 11:08:41 阅读:4595 评论:0 收藏:0 [点我收藏+] 标签: 由于前两 ...
- 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架
不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...
- 走进webpack(2)--第三方框架(类库)的引入及抽离
在当代的前端开发中,很少会用原生JS来开发页面,最基本的都会使用jQuery来节省我们开发的时间和效率,而angular,vue,react的出现更是为前端开发者带来了福音.那么这篇文章就说说如何用w ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )(转)
文章转自 https://www.cnblogs.com/Smiled/p/9806781.html 众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程 ...
- 小程序第三方框架对比 ( wepy / mpvue / taro )
众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端 ...
- Angular4.0引入第三方框架,eg: bootstrap、jquery
最近学习angular4.0,在练习是需要使用jquery和bootstrap.但是查阅了,大多数都是angular2的方法,或者是angular4.0的方法但是不准确.花了一些时间终于捣腾出来了,把 ...
随机推荐
- iOS - .a静态库的打包(包括打包的文件中用到了一些别人的三方库和分类的处理)
一.概念篇 什么是库? 库是程序代码的集合,是共享程序代码的一种方式 根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworking ...
- memcache入门笔记
向memcached保存数据时可以指定期限(秒).不指定期限时,memcached按照LRU算法保存数据. 这三个方法的区别如下: 选项 说明 add 仅当存储空间中不存在键相同的数据时才保存 rep ...
- 转 centos虚拟机环境的构建。
转自:http://www.cnblogs.com/xiaoluo501395377/archive/2013/03/31/CentOs.html 一.前言 作为一个想从事j2ee后台开发的程序猿,l ...
- react-native 踩坑记
最近在使用react-native的时候遇到了很多坑,这里给大家分享下 一.样式 react-native 虽然支持flex布局,但是所有的样式均是css样式的一个很小的集合,尤其是在安卓机下问题尤为 ...
- JAVA运行时问题诊断-工具应用篇
该BLOG内容是之前在部门组织讨论运行时问题时自己写的PPT内容,内容以点带面,主要是方便以后自己回顾查看. 大纲包括:1.运行时问题分类 2.服务器自带工具 3.其他工具 4.例子 5.实际情况 运 ...
- UWP Composition API - GroupListView(一)
需求: 光看标题大家肯定不知道是什么东西,先上效果图: 这不就是ListView的Group效果吗?? 看上去是的.但是请听完需求.1.Group中的集合需要支持增量加载ISupportIncreme ...
- eclipse项目上面有个红叉,但是没有任何地方有错误
eclipse项目上面有个红叉,但是没有任何地方有错误,clear,refresh,重启都试过了,依然没用, 后来我换了一个workspace,编译的时候提示: Description Resourc ...
- JS表单前台校验模板
表单校验是几乎所有WEB应用都会用到的,这里提供一种用原生JavaScript的简单前台校验 <form id="registerForm" action="&qu ...
- 解决关键SSL安全问题和漏洞
解决关键SSL安全问题和漏洞 SSL(安全套接字层)逐渐被大家所重视,但是最不能忽视的也是SSL得漏洞,随着SSL技术的发展,新的漏洞也就出现了,下面小编就为大家介绍简单七步教你如何解决关键SSL安全 ...
- Scrapy创建zentao爬虫
1.安装好Scrapy爬虫框架 2.切换到F盘的wooyun目录下执行:scrapy startproject zentao 这个命令会在当前目录下创建一个新目录zentao,它的结构如下: