您的位置:首页 > 移动开发 > Android开发

饭否Android端更新流程分析

2020-02-06 04:57 393 查看

         手上有一份饭否官方开源android代码,这里把源码分析的结果分享一下

         登录过程就不必说了,成功登录之后就来到HomePage.java,类HomePage实现了PutllToRefrsh的接口OnRefreshListener2<ListView>(onPullDownToRefresh),也就是当每次下拉时就会刷新,刷新会调用doRefresh接口。doRefresh会调用doRetrieve来获取更新,这个函数就会组装参数,根据不同的参数调用不同的服务,这里只研究主页也就是homeTimeLine,也就是调用FanfouServiceManager.doFetchHomeTimeline,这个函数的第一个参数是一个context,而第二个参数是一个Messenger,另外两个参数并不重要。

         FanfouServiceManager.doFetchHomeTimeline,它什么额外的工作也不作,只是再次组装参数并转发给FanfouServiceManager.doFetchTimeline,这个函数它定义了一个Intent,并从context启动了一个服务,对我而言这就是最有趣的地方,android系统是怎样根据一个Intent过滤出目标服务?

         FanfouService派生于IntentService,覆盖了方法onHandleIntent,这个方法里用一个switch语句根据类型继续走下去,这里调用了fetchTimeLine,fetchTimeLine函数组装参数之后会调用一个this.api.homeTimeline,this.api是一个接口,它的具体实现是ApiClientImpl

         homeTimeline调用fetchStatuses,而这里也就是andorid与服务器交互的一片代码,当请求准备好之后,fetch函数就开始构造http请求,SimpleClient.exec执行请求得到一个HttpResponse,这个response是一个json串,这是饭否众UI响应到服务端回应的一个完整流程,但是等等虽然我们拿到了结果,但UI怎么更新数据的呢?

        回到FanfouService.fetchTimeLine,当拿到response之后,这里就要开始解析response了,这里实际上是把解析了json结果存放到数据库时,而饭否把android端的用户数据存放在一个叫statuse的表时,这是一张笼统的表,它包含了用户所有数据。

        数据库里的数据怎么会更新到UI上,而UI又怎么知道更新已经完成。这就要回到FanfouServiceManager.doFetchHomeTimeline的第二个参数Messenger,正是这个messenger来完成这个UI,FanfouService.fetchTimeline有一行代码sendIntMessage,sendMessage通过Bunndle来通知UI更新成功与失败,而HomePage会响应它,HomePage的内部类ResultHandler,方法handleMessage会处理结果,如果更新成功,homeTimeLine对应的cursor会requry,也就是重新查询,这个时候就会填充数据到view时,这是因为每一个ptrview都设置了CursorAdapter

        这时候一切都清楚了,怎么说呢,这个代码架构是有一点弯曲,当然我也没有看过其它代码。

       

转载于:https://www.cnblogs.com/BlankEye/archive/2013/06/05/3119115.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
dongcheng2353 发布了0 篇原创文章 · 获赞 0 · 访问量 65 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: