作家
登录

App开发架构指南(谷歌官方文档译文)

作者: 来源: 2017-05-26 09:21:05 阅读 我要评论

App开辟架构指南

这篇文┞仿面向的是已经控制app开辟根本常识,想知道若何开辟结实app的读者。

注:本指南假设读者对 Android Framework 已经很熟悉。如不雅你照样app开辟的新手,请查看 Getting Started 系列教程,该教程涵盖了本指南的预告常识。

app开辟者面对的常见问题

跟传统的桌面应用开辟不合,Android app的架构要复杂得多。一个典范的Android app是由多个app组件构成的,包含activity,Fragment,service,content provider以及broadcast receiver。而传统的桌面应用往往在一个宏大年夜的单一的过程中就完成了。

比如,当你要在本身最爱好的社交收集app平分享一张照片的时刻,你可以想象一下会产生什么。app触发一个camera intent,然后Android OS启动一个camera app来处理这一动作。此时用户已经分开了社交收集的app,然则用户的操作体验倒是无缝对接的。而 camera app反过来也可能触发另一个intent,比如启动一个文件选择器,这可能会再次打开另一个app。最后用户回到社交收集app并分享照片。在这时代的随便率性时刻用户都可被德律风打断,打完德律风之后持续回来分享照片。

在Android中,这种app并行操作的行动是很常见的,是以你的app必须精确处理这些流程。还要记住移动设备的资本是有限的,是以任何时刻操作体系都有可能杀逝世某些app,为新运行的app腾出空间。

通用的架构准则

如不雅app组件不克不及存放数据和状况,那么app照样可架构的吗?

最重要的一个原则就是尽量在app中做到separation of concerns(存眷点分别)。常见的缺点就是把所有代码都写在Activity或者Fragment中。任何跟UI和体系交互无关的工作都不该该放在这些类傍边。尽可能让它们坚削发单轻量可以避免很多生命周期方面的问题。别忘了能并不拥有这些类,它们只是连接app和操作体系的桥梁。根据用户的操作和其它身分,比如低内存,Android OS可能在任何时刻烧毁它们。为了供给靠得住的用户体验,最好把对它们的依附最小化。

第二个很重要的准则是用。之所以要持久化是基于两个原因:如不雅OS烧毁app释放资本,用户数据不会损掉;当收集很差或者断网的时刻app可以持续工作。Model是负责app数据处理的组件。它们不依附于View或者app 组件(Activity,Fragment等),是以它们不会受那些组件的生命周期的影响。保持UI代码的简单,于营业逻辑分别可以让它更易治理。

app架构推荐

在这一末节中,我们精晓过一个用例演示若何应用Architecture Component构建一个app。

注:没有一种合适所有场景的app编写方法。也就是说,这里推荐的架构合适作为大年夜多半用户案例的开端。然则如不雅你已经有了一种好的架构,没有须要再去修改。

假设我们在创建一个显示用户简介的UI。用户信息取自我们本身的私有的后端REST API。

创建用户界面

UI由UserProfileFragment.java以及响应的构造文件user_profile_layout.xml构成。

要驱动UI,我们的data model须要持有两个数据元素。

User ID: 用户的身份辨认。最好应用fragment argument来传递这个数据。如不雅OS杀逝世了你的过程,这个数据可以被保存下来,所以app再次启动的时刻id仍是可用的。

User object: 一个持有效户信息数据的POJO对象。

我们将创建一个持续ViewModel类的UserProfileViewModel来保存这一信息。

一个ViewModel为特定的UI组件供给数据,比如fragment 或者 activity,并负责和数据处理的营业逻辑部分通信,比如调用其它组件加载数据或者转发用户的修改。ViewModel并不知道View的存在,也不会被configuration change影响。

如今我们有了三个文件。

user_profile.xml: 定义页面的UI

UserProfileViewModel.java: 为UI预备数据的类

UserProfileFragment.java: 显示ViewModel中的数据与锾应用户交互的┞菲握器

下面我们开端实现(为简单起见,省略了构造文件):

  1. public class UserProfileViewModel extends ViewModel { 
  2.  
  3.     private String userId; 
  4.  
  5.     private User user
  6.  
  7.   
  8.  
  9.     public void init(String userId) { 
  10.  
  11.         this.userId = userId; 
  12.  
  13.     } 
  14.  
  15.     public User getUser() { 
  16.  
  17.         return user
  18.  
     1/5    1 2 3 4 5 下一页 尾页

      推荐阅读

      新软体机器人有望实现与人类安全接触

    科学家之前在这方面的测验测验,都须要借助外部照明,但效不雅并不睬想。而芬兰坦佩雷理工大年夜学研究人员阿莱·普莱马基及其同事,此次将光响应液晶高弹体与光学纤维相结合,克服了外部激活需求。根据他们的>>>详细阅读


    本文标题:App开发架构指南(谷歌官方文档译文)

    地址:http://www.17bianji.com/lsqh/35427.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)