这篇文┞仿面向的是已经控制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中的数据与锾应用户交互的┞菲握器
下面我们开端实现(为简单起见,省略了构造文件):
- public class UserProfileViewModel extends ViewModel {
- private String userId;
- private User user;
- public void init(String userId) {
- this.userId = userId;
- }
- public User getUser() {
- return user;
推荐阅读
科学家之前在这方面的测验测验,都须要借助外部照明,但效不雅并不睬想。而芬兰坦佩雷理工大年夜学研究人员阿莱·普莱马基及其同事,此次将光响应液晶高弹体与光学纤维相结合,克服了外部激活需求。根据他们的>>>详细阅读
本文标题:App开发架构指南(谷歌官方文档译文)
地址:http://www.17bianji.com/lsqh/35427.html
1/2 1