1.1 重新规划android的项目结构
 
  重新规划android的目录结构分两步:
1.建立AndroidLib类库,将与业务无关的逻辑转移到AndroidLib。
acitivity存放的是跟业务无关的Activity基类
cache包存放的是缓存数据和图片相关的处理
net包存放的是网络底层封装
ui存放自定义控件
utils存放各种与业务无关的公共方法
 
 
2.将主项目中的类分门别类的进行划分,放置各种包中。
activity 按模块继续划分,将不同模块的activity划分到不同的包下
adapter放适配器
db 存放SQLite相关逻辑
engine存放业务相关的类
entity所以的实体存放
interfaces 接口 命名以I作为开头
listener 基于Listener的接口 命名以On作为开头
ui自定义控件
utils 所有的公共方法
 
这样划分的目的:
1.每个文件单独一个类,不要有嵌套
2.将acitivity划分后,可以迅速定位具体的页面。开发人员都只负责自己的那个包,开发边界很清晰。
 
1.2 为Activity定义新的生命周期
有一个原则,单一职责:一个类或方法,只做一件事。
 
观察Activity的onCreate发现:
这段代码包括三段逻辑:
1.初始化变量 initVariables
2.加载布局,初始化空间,为控件挂上事件方法。initView
3.获取数据 loadData
 
 
可以在AndroidLib这个类库中的BaseActivity重写onCreate方法。
 
然后去继承它实现它的三个方法。
 
1.3 统一事件编程模型
 
根据上面的
btn_login.setOnClickListener(this);
 
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_login:
            //执行点击后的操作
            break;
        }
    }
 
每次还会使用R.id
所以比较推崇:
btn_login.setOnClickListener(this);
        
        btn_login.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                //执行点击后的操作
            }
        });
 
 
1.4 实体化编程
 
GSON:          https://github.com/google/gson
 
fastJSON添加之后:
1:加了符号Annotation的实体属性,使用就崩溃
2:有泛型属性,使用就崩溃
 
调试的时候没事打包签名的时候就会出问题。
 
-keepattributes Signatue     //避免混淆泛型
-keepattributes *Annotation*     //不混淆注解
 
 
在页面跳转使用的实体:
1.调用请求的Json数据
2.从上一个页面传过来。
 
1.5 adapter模板:
 
public abstract class ListBaseAdapter<T> extends BaseAdapter{
    
    protected Context mContext;
    protected List<T> mValues;
    protected LayoutInflater mInflater;
    
    public ListBaseAdapter(Context context, List<T> values) {
        mContext = context;
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        mValues = values;
    }
    
    public Context getContext() {
        return mContext;
    }

@Override
    public int getCount() {
        if (mValues != null)
            return mValues.size();
        return 0;
    }

@Override
    public T getItem(int position) {
        if (position == getCount() - 1 || mValues == null) {
            return null;
        }
        return mValues.get(position);
    }

@Override
    public long getItemId(int position) {
        return position;
    }

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getItemView(convertView, position);
    }
    protected abstract View getItemView(View convertView, int position);
    
    public void update(List<T> values) {
        mValues = values;
        notifyDataSetInvalidated();
        notifyDataSetChanged();
    }
}

 
 
1.6类型的安全转换
 
    /**
     * 将字符转换成数字
     * @param value
     * @param defaultValue
     * @return
     */
    public final static int convertToInt(String value,int defaultValue){
        if(StringUtils.isNullOrEmpty(value)){
            return defaultValue;
        }
        try {
            return Integer.valueOf(value.toString());
        } catch (Exception e) {
            try {
                return Double.valueOf(value.toString()).intValue();
            } catch (Exception e1) {
                return defaultValue;
            }
        }
    }
 
/**
     * 判断是否为空
     *  
     * @param text
     * @return
     */
    public static boolean isNullOrEmpty(String text) {
        if (text == null || "".equals(text.trim()) || text.trim().length() == 0
                || "null".equals(text.trim())) {
            return true;
        } else {
            return false;
        }
    }

 
 

《app研发录》第一章 重构,夜未眠笔记的更多相关文章

  1. 《App研发录》知识点汇总

    原文链接:http://www.jianshu.com/p/fc8c4638937e <App研发录>这部书是包建强写的,说来也巧,在读这边书之前在看池建强的<Mac 人生元编程&g ...

  2. 【Android】《App研发录》总结

    说明 看这本书的时候,总感觉怪怪的. 因为在地铁上看完的,作者书中基本都是他自己工作中遇到的问题和坑,虽说这样会让人感觉找到了解决方案,可以再进行深入的研究,可是某些地方介绍的有点片面,仅仅是引用部分 ...

  3. 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记

    这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~ 原文内容比较充实,建议有时间可以读一下原文. 第一章主要是个概览. MySQL的逻辑架构 默认情况下, ...

  4. 《App研发录》面世

    古者富贵而名灭,不可胜记,唯倜傥非常之人称焉.故西伯拘而演<周易>,屈原放逐,乃赋<离骚>.文人雅士一次次的谱写着千古绝唱,而我亦不能免俗,也要附庸风雅,写一部前不见古人.后不 ...

  5. 《App研发录》 源码

    第1章源码: 1.1 重新规划Android项目结构 1.1.zip 1.2 为Activity定义新的生命周期 1.2.zip 1.3 统一事件编程模型 1.3.zip 1.4 实体化编程 1.4. ...

  6. APP研发录笔记

    一.消灭全局变量 在内存不足时,系统会回收一部分闲置的资源,由于App被切换到后台,所以之前存放的全局变量很容易被回收,这时再切换到前台继续使用,会报空指针崩溃.想彻底解决这个问题,就要使用序列化. ...

  7. Javascript模式(第一章简介)------读书笔记

    一:模式 模式是一个通用问题的解决方案,可以提供一个更好的实践经验.有用的抽象化表示和解决一类问题的模板. 本书主要讨论如下三种类型的模式 1 设计模式:可复用面向对象软件的基础,包括singleto ...

  8. ASP.NET本质论第一章网站应用程序学习笔记3-对象化的Http

    在.NET环境下,万物皆对象,在HttpRuntime收到请求之后,立即将通过HttpWorkerRequest传递的参数进行分析和分解,创建方便用于网站应用程序处理用的对象,其中主要涉及到两个对象类 ...

  9. ASP.NET本质论第一章网站应用程序学习笔记2

    1.初步走进ASP.NET 上篇笔记我们讲述了服务器监听问题,这篇我们就要讲述具体的请求处理了,ASP.NET所涉及的类大多数定义在System.Web程序集中. 在.NET中,程序集管理的最小逻辑单 ...

随机推荐

  1. PHP libxml RSHUTDOWN安全限制绕过漏洞(CVE-2012-1171)

    漏洞版本: PHP PHP 5.5.x 漏洞描述: BUGTRAQ ID: 65673 CVE(CAN) ID: CVE-2012-1171 PHP是一种HTML内嵌式的语言. PHP 5.x版本内的 ...

  2. PHP imdb类多个跨站脚本漏洞

    漏洞版本: PHP imdb Classes 2-2.1.5 漏洞描述: BUGTRAQ ID: 64542 PHP是一种HTML内嵌式的语言. PHP imdb类2-2.1.5及其他版本在实现上存在 ...

  3. A标签执行JS脚本

    A标签执行JS脚本 分类: Web2012-12-25 22:48 1368人阅读 评论(0) 收藏 举报 前言 A标签是html中常用的标签,它与button按钮是实现页面跳转的两种最常用的方式,经 ...

  4. 腾讯微博OAuth2.0认证介绍

    腾讯微博开放平台,是基于腾讯微博系统,为广大开发者和用户提供的开放数据分享与传播平台. 广大开发者和用户登录平台后,就可以使用平台提供的开放API接口,创建应用从微博系统获取信息,或将新的信息传播到整 ...

  5. 【CSS3】Advanced5:At Rules:@import, @media, and @font-face

    1.@import bolt another stylesheet onto your existing one. @import url(**.css); must be placed at the ...

  6. HDU 1042 N!(高精度计算阶乘)

    N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  7. NDK编译路径问题

    有点偷懒,在一个使用了jni工程里面稍微修改一下,编译另外一个jni工程. 代码写完后,Android.mk等文件也写好,但是ndk-build的时候提示Android NDK:Your APP_BU ...

  8. linux bin文件制作

    一 Linux安装文件 Linux常见的安装为tar,zip,gz,rpm,deb,bin等.我们可以简单的分为三类, 第一:打包或压缩文件tar,zip,gz等,一般解压后即可,或者解压后运行sh文 ...

  9. Spout数据源

    Spout 数据源 消息源 Spout 是 Storm 的 Topology 中的消息生产者(即 Tuple 的创造者). Spout 介绍 1. Spout 的结构 Spout 是 Storm 的核 ...

  10. 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码

    前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...