项目这么讲!

大致介绍:介绍一下这个项目是干什么的

首先:我们这个项目分那么几层,最上面的是网络层.

1.网络层

  • 1.1 普通网络请求
  • 1.1 .1. 第一种方式介绍网络层:

    1. 组成: 线程+Handler/Asynctask
    2. 一般来说不会一个网络请求就会一个Handler —>引出概念: 线程池

    网络这块呢,我们不会针对每一个网络访问都去开一个新的线程,所以说采用了线程池的机制.
    而且线程池也是分为了几个不同的线程池,分为下载请求和普通请求或者是图片加载.

    我们之前用的XUtils框架发送请求的时候,就特别简单,就使用一个HttpUtils.send一下,然后里面传一个URL,传一个参数,再传一个回调接口就搞定了,而它的底层就是帮我们开辟了子线程。

  • 1.1.2 . 第二种方式介绍网络层:(仿照 XUtls2.x 的逻辑)

    HttpUtils里面send这个方法里面肯定也是做了封装,也会之开了线程访问网络.访问网络之后,就会回调我们之前传入的接口。

    其实XUtils里面也是有Handler机制的,联网之后肯定会有响应码返回,响应码成功失败,也是使用Hanlder来处理的,它的内部也是附带一个Handler的。发送了消息之后,在Handler的HandlerMessage()里面,调传入回调接口的回调方法。所以我们在使用的时候就比较简单了,因为它内部已经封装给线程处理了。

    有的时候也是会对XUtils再做一次封装:

    使用BaseActivity,让其实现一下网络回调接口,这样在所有的Activity里面 只要是访问网络,就可以在回调方法里面写代码了。

  • 1.1.3 JSON–>JavaBean的转换

    一般使用Gson

  • 1.2 网络访问我们一般做的都是缓存,那么我们该如何指定缓存策略呢?

    • 普通数据缓存:

    • 读本地 —> 先显示本地数据 —> 拿时间戳访问服务器 —> 判断是否有更新 —>

    • 如果有更新:返回新数据 +时间戳 —> 缓存到本地(应用私有目录/SD卡/数据库) —> 重新显示数据

    • 如果没有更新:服务器返回空数据 —> 获取到不需要刷新界面

  • 1.3 断点下载/上传(加分项)

    一般来说断点下载的框架都是一个线程下载一个文件,可以多个线程同时下载多个文件,在Android这个平台上很少说是多个线程下载一个文件,本身处理器性能就不是很好,线程开多了话就会影响性能。

    • 我们开一个线程,线程里面使用HttpURLConnection/HttpClient(在Android6.0里面被移除了),在下载请求访问的时候,请求里面加一个头字段。服务器会返回给我们一个流数据,我们拿这个流写入到本地文件。

    • 每写一段都会存到数据库,针对每一个下载,一般来说咱们有一个DownLoadTask(下载任务)。那么这个下载任务在下载的时候,会不停的把这个下载任务的文件总大小,当前下载大小,当前文件储存目录,都要存到数据库里面。

    • 既然是断点,那么就可以暂停下载。从网络上请求一点,就往数据库写一点。而当我们停下来再开始的时候,就先把数据库中存的这个下载信息读取出来。再还原成DownLoadTask,再开启线程重新下载。重新下载的时候一般可以从我们的请求头字段中指定Range(下载位置)。

    • 下载完成之后,就会在数据库中说明该文件下载完成。

    • 下载的过程当中要求更新界面,这里我们还是使用的Handler,把下载的进度封装成消息,发送出来。

    • 一般一个DownLoadTask对应的某一个条目都会写一个接口(DownLoadListener)。开始,暂停, 下载失败,Handler每次发送的消息不一样,我们就可以对应不同的下载信息调不同的DownLoadListener的回调方法。

    • 这时候就有一个问题了,如果ListVIew条目比较多。上下一滑动的话,就会导致条目的下载进度混乱。我们一般是在ViewHolder里面进行处理。

2. 业务逻辑层

  • 一个项目,里面最核心的就是业务逻辑。

  • 2.1 网络层获取到数据封装成JavaBean之后,进行页面显示。下拉刷新的策略和加载更多的策略可以说一下。针对新闻客户端:收藏,登录,分享。 针对商城项目:购物车,支付

  • 2.2 Service(启线程,保持服务器连接,推送),BroadCaseReciver(启服务,组件间通讯的工具,接收广播,修改界面)

3.页面层

  • 3.1 Activit

    • Activity:抽取BaseActivity,一般提供整个界面的数展示流程,onCreate里面Fbi,initData里面联网访问数据。
      使用XUtils接口回调的方法的时候可以让BaseActivity实现接口,子类如果联网的话就可以重写父类相应的方法,而不用实现整个接口。

    • BaseActivity里面有一个集合,在onCreate里面记录打开的Activity。在onDestroy里面,将打开的集合移除掉。
      可以提供一个方法,遍历集合Finish掉每个Activity,最后再调用一下android.os.Process.killProcess(android.os.Process.myPid).退出当前应用。

    • 还可以提供一个静态方法startActivity(),首先定义成员变量,在onCreate的时候使成员变量=this。在startActivity通过判断成员变量是否等于null,判断当前是否有应用在前台。
      在前台的话,用this直接开启Activity。不在前台的话就设置addFlags(Intent.FLAG.ACTIVITY.NEW_TASK),用全局Context开启Activity。这样就可以直接在Service中开启Activity,而不用单独做判断了。)

  • 3.2 Fragment

    • 抽取BaseFragment。

    • show/hide :如果想要Fragment显示的比较快些的话,就使用Show/Hide。但是Show/Hide导致Fragment不会被销毁,会比较占用内存资源

    • replace:就是把整个Fragment销毁掉,替换为另一个Fragment。虽然速度可能比Show/Hide慢一些,但是节省内存。主要如何使用,看项目需求。

  • 3.3 常用控件

    • ListView优化:
      局部刷新,可以给Item里面的ViewsetTag。哪些View需要刷新, 就刷新,不需要的话就直接NotifyDataChange
      分批加载

    • ViewPager优化:
      默认是加载左右页,可以设置不让它预加载。或者如果是让显示的效率高一些的话,也可以设置为多加载。
      可以结合Fragment使用
      使用jazzViewPager开源项目增加动画效果

  • 3.4 自定义控件

4. 优化(掺杂在前三部分里面)

  • 4.1 布局优化

    • 使用 RelativeLayout比使用LinearLayout的层级关系要少一些。
    • 多使用include标签,优化代码。对于后期修改比较有用。
    • merge标签,一般和include标签结合使用。使用merge标签作为一个布局文件的根节点,可以减少一层嵌套。
    • ViewStub标签:用的时候显示,不用的时候不去加载。
    • 布局嵌套不能太深,可以写布局文件的时候写的少一点,后期再使用代码往响应的布局里面添加,不用的时候再使用代码移除调。addView/removeView
  • 4.2 代码优化

    • javaBean当中不需要有get/set方法,直接设置为public

    • 集合在Android里面不需要使用泛型

    • Fbi使用注解框架优化代码(有些是运行时注解,降低代码效率。有些是编译时注解,不会降低代码效率)如:ButterKnife,Dagger2,XUtils3

    • Lint: 在Eclipse里面(AndroidTools–>Run Lint),Android检查工具会将所有认为有问题的东西显示出来。 按照它的检查结果,更改代码。

  • 4.3 内存/性能优化

    • OOM:申请的内存太多,超出了应用程序限制。一般来说如果是一下申请,或者一下加载一个大文件造成的OOM很好解决,直接看问题出在哪就行。而另外的一种就是内存一点一点涨上去的,这种就和内存泄漏有关了。

    • 内存泄漏:有些变量一直引用者某些对象,对象使用完毕,但是还有引用指向,无法回收,内存释放不掉,就造成内存泄漏。可以使用 MAT,MAT是一个Eclipse插件,也可以做一个单独的应用程序。分析内存,查看内存当中有多少对象还在引用着。

  • 4.4 电量优化

  • Android性能优化典范

  • http://hukai.me/android-performance-patterns/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值