• 第三方框架之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>
     
  • 相关阅读:
    非常精辟的几句话
    关于免杀的实践
    分析PE
    分析 Nanocore
    CTO的窘境
    企业级容器云平台
    POJ 2274
    POJ 1703
    POJ 1182
    DNS协议以及报文格式总结
  • 原文地址:https://www.cnblogs.com/cold-ice/p/6080880.html
Copyright © 2020-2023  润新知