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快速开发框架需要有以下权限:

  1. <!-- 访问互联网权限 根据需要添加-->
  2. <uses-permission android:name="android.permission.INTERNET" />
  3. <!-- SDCARD读写权限 根据需要添加 -->
  4. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
  5. <!-- 网络状态检测权限 根据需要添加-->
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  7. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  8. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  9. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  10. 配置:
  11. <receiver android:name="com.ta.util.netstate.TANetworkStateReceiver" >
  12. <intent-filter>
  13. <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  14. </intent-filter>
  15. </receiver>
  16. <application
  17. android:name="com.ta.TAApplication" >
  18. application必须配置以上格式
  19.  

二、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进行操作。
  1. public class ThinkAndroidDemoActivity extends TAActivity {
  2.  
  3. TASQLiteDatabasePool sqlitePool = getTAApplication()
  4. .getSQLiteDatabasePool();
  5. TASQLiteDatabase sqliteDatabase=sqlitePool.getSQLiteDatabase();
  6. //使用中
  7. sqliteDatabase.insert(entity);
  8. sqlitePool.returnSQLiteDatabase(sqliteDatabase);
  9.  
  10. }
    实例化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());
}

八、网络状态检测模块

  • 当网络状态改变时,对其进行监测。
  1. TANetworkStateReceiver.registerObserver(new TANetChangeObserver()
  2. {
  3. @Override
  4. public void onConnect(netType type)
  5. {
  6. // TODO Auto-generated method stub
  7. super.onConnect(type);
  8. Toast.makeText(TestActivity.this, "onConnect",
  9. Toast.LENGTH_SHORT).show();
  10. }
  11.  
  12. @Override
  13. public void onDisConnect()
  14. {
  15. // TODO Auto-generated method stub
  16. super.onDisConnect();
  17. Toast.makeText(TestActivity.this, "onDisConnect",
  18. Toast.LENGTH_SHORT).show();
  19. }
  20. });
  1. PS: 需要开启权限
  2. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
  3. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
  4. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  5. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  6.  
  7. 配置:
  8. <receiver android:name="com.ta.util.netstate.TANetworkStateReceiver" >
  9. <intent-filter>
  10. <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
  11. </intent-filter>
  12. </receiver>
  1.  

第三方框架之ThinkAndroid 学习总结(一)的更多相关文章

  1. 第三方框架之ThinkAndroid 学习总结(二)

    上文记录了一些ThinkAndroid常用的模块,本文继续介绍ThinkAndroid中的网络化模块. 按照惯例先上Github原文地址:https://github.com/white-cat/Th ...

  2. ios开发学习笔记040-autolayout 第三方框架Masonry

    不管是是界面创建约束还是代码创建约束,苹果官方提供的方式都比较繁琐.所以出现了第三方框架. Masonry 在github地址如下: https://github.com/SnapKit/Masonr ...

  3. android第三方框架 xlistview 的使用

    如今上拉刷新,下拉加载更多已经是浩如烟海的app的标配了 最近正好有相关的需要就去学习了一下,还是那句老话凡事都靠自己来 搞实在不是一件好事,费时费力不说可能还是在做无用功,不过自己研究学习 还是很有 ...

  4. 使用第三方框架 Masonry 实现自动布局

    使用第三方框架 Masonry 实现自动布局 时间:2015-02-10 11:08:41      阅读:4595      评论:0      收藏:0      [点我收藏+] 标签: 由于前两 ...

  5. 源码推荐(7.17):不规则按钮类似于遥控器按钮,一个可以最大程度简化PageView与TabView切换的第三方框架

    不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右(作者:masa_chu) 不规则按钮,类似于遥控器按钮,可以单独控制按钮的上下左右 测试环境:Xcode 6.2,iOS 6.0以上 Lazy ...

  6. 走进webpack(2)--第三方框架(类库)的引入及抽离

    在当代的前端开发中,很少会用原生JS来开发页面,最基本的都会使用jQuery来节省我们开发的时间和效率,而angular,vue,react的出现更是为前端开发者带来了福音.那么这篇文章就说说如何用w ...

  7. 小程序第三方框架对比 ( wepy / mpvue / taro )(转)

    文章转自  https://www.cnblogs.com/Smiled/p/9806781.html 众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程 ...

  8. 小程序第三方框架对比 ( wepy / mpvue / taro )

      众所周知如今市面上端的形态多种多样,手机Web.ReactNative.微信小程序, 支付宝小程序, 快应用等,每一端都是巨大的流量入口,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端 ...

  9. Angular4.0引入第三方框架,eg: bootstrap、jquery

    最近学习angular4.0,在练习是需要使用jquery和bootstrap.但是查阅了,大多数都是angular2的方法,或者是angular4.0的方法但是不准确.花了一些时间终于捣腾出来了,把 ...

随机推荐

  1. 创建/发布cocoapods公共库

    对于大多数iOS开发者而言,cocoapods都是一个非常便捷的第三方库引导工具,该工具可以帮助我们快速导入所需第三方库,并且进行相关配置. 本文即为描述如何发布一个第三方库,提供给所有的开发者使用. ...

  2. C#之反射

    Assembly assembly = Assembly.Load("PeopleDal"); //获取程序集名称 Module[] modules = assembly.GetM ...

  3. Unity Animation System(动画系统)

    动画系统: 支持:动画融合,混合,叠加动画,行走循环的时间同步,动画层,控制动画的各个方面(时间,速度,融合权重)   带有每顶点1.2或4骨骼的蒙皮网格,以及支持基于物理的布娃娃系统和程序动画.   ...

  4. python的Template

    Template模块,可以用来制作web页面的模板,非常的方便. Template属于string中的一个类,所以要使用的话要在头部引入: from string import Template 模板 ...

  5. C#运算符号

    double x=5.1e3;// 5.1乘以10 的3次方. x就是 5100 //注 :  5.1e+3=5.1e3=5.1e03=5.1e+03 double y=5.1e-3;// 5.1乘以 ...

  6. 防止sql注入和sqlmap介绍

    sql注入问题从WEB诞生到现在也一直没停过,各种大小公司都出现过sql注入问题,导致被拖库,然后存在社工库撞库等一系列影响. 防止sql注入个人理解最主要的就一点,那就是变量全部参数化,能根本的解决 ...

  7. Aspx页面模拟WebService功能

    在后台引入 using System.Web.Services 命名空间 然后在编写web服务方法: [WebMethod] public static string GetData(string t ...

  8. eclipse启动不了,出现“Java was started but returned exit code=13......”对话框

    eclipse启动不了,出现"Java was started but returned exit code=13......"对话框如下 解决方案:1.使用的是java jdk6 ...

  9. hash表及Java中的HashMap与HashSet

    链接: http://alex09.iteye.com/blog/539545/ 当程序试图将一个 key-value 对放入 HashMap 中时,程序首先根据该 key 的 hashCode() ...

  10. SPOJ - PLSQUARE Palin Squar(hash+回文串)

    题意:给你一个n*n (n<=200)的字符串矩阵,问你每行每列都是回文串的最大的m*m的矩阵是多少 题解:首先答案不满足单调性,即m成立而m-1与m+1都却不一定成立,所以必须枚举答案确定现在 ...