精华内容
下载资源
问答
  • Android架构师面试题精编解析大全》
  • Alibaba技术官丢出来的Android架构师筑基必备技能实战笔记,这份笔记让人看了不得不爱,由此可见同行们对这份文档的认可程度,这也意味着对我们的学习和技术提升有很大的帮助。
  • 深入Android架构(从线程到AIDL)
  • Camera整体架构简单整理一.Android Camera整体架构简述1.1 Android Camera 基本分层1.2 Android Camera工作大体流程二. Camera App层简述三. Camera Framework层简述3.1 CameraServer初始化3.2 App调用CameraServer...
  • 基于Android架构对讲系统的回声消除算法的设计与实现_陈惠明
  • PPT的形式展示Android 常用架构(MVC、MVP和MVVM) 简单明了 包含例题以及文字解释 对于刚上路的朋友 不懂架构的 可以下载看看 自己学习一下 有助于项目优化 对后期拓展有很大的帮助!
  • android-architecture-components, Android架构组件示例 Android架构组件示例使用架构组件的示例的Collection:聊天室生命周期识别组件ViewModelsLiveData分页( 预览)WorkManager ( alpha )示例BasicSample 显示
  • Android架构师技术栈全套视频资源:java基础、android高级UI,性能优化、移动架构、算法与数据结构、bjmashibin全套、gradle全套以及丰富的实战案例等
  • Android架构设计的思想与原则是什么?最近工作中遇到了android中的权限问题,发现Android确实是开源的,但并不开放,比如权限控管就相当严格,限制做很多事情,这一点得意于linux内核。这也勾起来对其架构研究的兴趣...
  • 本文的主题如下:下面这张图展示了Android系统的主要组成部分:图1、Android系统架构(来源于:androidsdk)可以很明显看出,Android系统架构由5部分组成,分别是:LinuxKernel、AndroidRuntime、Libraries、...
  • Android 架构师成长之路

    万次阅读 多人点赞 2017-09-11 14:56:53
    前言 ...其中,稳坐榜首的仍然是Java编程语言,...从普遍的企业的角度来看,存在的问题是:后台被认为是技术核心,客户端却被认为技术含量不高,甚至小企业会让后台人员顺便开发简单的客户端,或者让后台的架构师管理...

    前言

    众所周知,当下流行的编程语言有Java、PHP、C、C++、Python、Go等。其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,Java往往成为其代名词。Java语言的背景强大,开发者众多,一直发展都不错。从普遍的企业的角度来看,存在的问题是:后台被认为是技术核心,客户端却被认为技术含量不高,甚至小企业会让后台人员顺便开发简单的客户端,或者让后台的架构师管理客户端几个人。事实上,客户端技术和后台技术的侧重点完全不同,连编程语言都不同(Android使用Kotlin编程语言的逐渐普及)。另外,后台的人跟用户相对离得太远,而客户端是直接面向用户的,与产品人员沟通更直接。所以,我认为企业产品真的是为了给用户用,那么选客户端背景的人员去做架构更好一点。

     

    一、移动架构师职位介绍

    (1)移动架构师公认的职位描述是什么?

    事实上并没有非常准确的职位描述。不过我可以尝试给出了一个:

    1. 设计当前架构。包括新技术方案的制定或评审。
    2. 改进过去架构。根据业务的发展或者技术债务的原因,重构当前技术方案并且推进实施。
    3. 前瞻未来架构。技术方案调研和分析,随时准备好对新技术的使用。
    4. 推进技术方案实施。解决实施过程中具体的技术问题。
    5. 技术分享和培训。推进技术交流和新技术的使用。
    6. 人员的招聘。技术面试。

    (2)移动架构师是否还要日常编码,如果需要,比例是多少?

    虽然带有管理色彩,但仍然以技术为主。所以代码是必须要写的,架构师不写代码,就成管理了。写代码的比例应该至少是 40% 的工作时间以上。

    (3)移动架构师的成长路线是什么样的?

    可以先试着解决当前业务中的技术问题,然后再培养自己的技术前瞻性,为业务的未来储备技术。架构师立命的根本还是技术,所以在移动开发技术上研究的事情都要尝试去做。另外,技术人员通常不善于表达,而架构师的很多工作(例如技术分享,培训,面试,推进技术方案实施)都是需要沟通工作的。另外优秀的移动架构师能够对业界都有所影响。所以,作为一个移动架构师,锻炼自己的表达能力也是必要的一条成长路线。

    (5)移动架构师是否需要学习前端、后端开发技术?

    这等于问要不要扩展技术“广”度,而架构师标签之一就是“广”。不过是看个人的精力能够达到多大的广度和深度了。

    (6)移动架构师是否需要设计整个 C/S 架构?

    这点倒是夸张了,配合后台人员设计应该是可以的,总负责的话,挑战略大了一些。

    (7)移动架构师如何进行团队沟通工作?

    1、与CTO总监的合作。首先从思想上要认识到两者是利益完全一致的。总监为架构师拓展上升空间,而架构师将总监的规划切实落地。保证足够的沟通,可以约定一个固定沟通机制,比如每2周一次,让双方在思想上保持同步和一致。架构师应该带着方案和CTO沟通,讲清楚A、B方案的优缺点。可以让CTO根据从上层去考虑做决定,就算架构师本职的决策,也最好先取得CTO的认可。如果出现意见分歧,最好的方式是先搁置,等条件成熟了,很可能意见会趋于一致。如果不能等,只要CTO的意见不是太离谱,还是按照CTO的意见执行比较好。如果有十足把握,认为自己的方案很好,那么也要得到CTO的许可和谅解,否则千万不要擅自去做,因为最后的锅不是你一个人能背的。

    2、与其他部门的合作。产品部门一般不懂技术,架构师的作用就是帮他解决这个问题,这个很好理解。在理解了产品需求后,进行技术可行性分析。在不改变整体方案目标的前提下,从技术的角度,提出改善意见,修改设计,目的是方便实现。与后台架构师搞好合作,从后台到前台,整条链路太长,一个人管不过来,需要两人好好合作,共同把好技术关。拉拢好测试部门,要当作开发的朋友看待,是自己人。如果关系够好,考虑让测试人员在“自测”阶段提前介入,帮助开发人员提供测试案例。运营部门的关系稍微远了一点,关键点是及早介入。防止临上线了,加入一堆的运营需求,就可能影响产品投放时间了。总之与其他部门以合作为主,挣取及早沟通,将风险消灭在反生之前。

    3、与团队成员的合作。移动开发团队人数不多,但是部门和开发语言多。有IOS,android,还有JS和Java网关。如果一个部门超过3个人,应该设置一个Team-Leader,进行授权实现间接管理。对于自己擅长的技术亲自去实现,和兄弟们一起战斗,深入到团队中。思考团队提升和储备,应让中层人员在一线作战,高层人员作指导,初层人员打酱油学习。对于自己不擅长的技术,可以采用“结对编程”的方法,让两个开发者在一台电脑上开发,一个编写另一个观察,程序基本是相同的,还是能够理解和参与讨论的。与几个Leader,要重点在于沟通,在大方向上保证思想一致,给他们空间适量授权,并协助他们做出成绩。重点注意团队的正能量以及活跃的气氛,人不是机器,和谐的氛围比冰冷的制度和惩罚要好得多。记录团队的功绩和成果,提高团队成员集体荣誉感,将奋斗目标引导到“自我价值”上来。

    (8)移动架构师项目新需求处理的注意事项

    1、开发流程。新的产品方案从市场运营提出需求开始,再到产品经理制定新的功能需求,最后开发手里进行研发。

    2、全局视野。在产品与开发首次会议时,首先从整个项目的全局出发,掌握需求的目的和意义和其他需求之间的关系。

    3、完善补漏。向产品提出的需求的不足之处,从用户和开发的角度进行补漏完善,从而保证项目正常的运行。

    4、接口数据。与后台数据接口开发人员定制数据在那个接口里给比较合理。

     

    二、Android架构师技术介绍

    架构与设计

    研发工具

    • 集成开发环境
      • Android Studio
      • Sublime Text
    • 版本控制系统
    • 调试工具
    • CodeReview工具
      • Gerrit
      • Phabricator
    • 构建工具
      • Gradle
      • Buck
    • 效率工具
      • 番茄钟
      • Markdown
      • WakaTime
      • Focus Matrix
      • evernote
      • Pocket

    移动安全

    专项技术

    软技能

    周边技术

    移动测试

    • 单元测试
      • JUnit
      • Robolectric
      • Mockito
    • UI自动化测试
      • Monkey
      • MonkeyRunner
      • UIAutomator
      • Robotium
      • Espresso
      • Appium
    • 持续集成
      • Jenkins
      • Travis CI
      • fastlane
    • 静态代码扫描
      • CheckStyle
      • FindBugs
      • PMD
      • Android Lint
      • Infer

    性能优化

    • 启动优化
    • 代码优化
    • 内存优化
    • 电量优化
    • 布局优化
    • 网络优化

    编程语言

    • Java
    • C
    • C++
    • Javascript
    • Groovy
    • Kotlin

     

    (本次更新时间:2019年02月21日19:05:16,未完待续,不定期补充内容)


     

    展开全文
  • Android架构师手册

    2015-07-30 13:53:40
    高焕堂编著的网上流行的Android架构师手册
  • 大家都知道在Android开发中,一个好的Android架构能为项目带来极大的遍历,对于版本发布,后期维护等有着极为重要的地位,可以说架构是APP可持续发展的灵魂。在Android开发中也涌现出了很多优秀的架构,从早期的MVC...

    1 前言

    大家都知道在Android开发中,一个好的Android架构能为项目带来极大的遍历,对于版本发布,后期维护等有着极为重要的地位,可以说架构是APP可持续发展的灵魂。在Android开发中也涌现出了很多优秀的架构,从早期的MVC到现在的MVP,MVVM等,Android架构一直在不停的演进。有鉴于此,google也终于在2017年的IO开发大会上推出了Android Architecture Components来帮助Android开发者构建更好的app架构。
    当然详情可以参考下面这边文章
    https://developer.android.com/topic/libraries/architecture/guide.html

    2 Android Architecture Components简介

    Android Architecture Components 主要包括以下几个组件:

    Lifecycles
    生命周期管理(Lifecycles)组件,帮助开发者创建 “可感知生命周期的” 组件,让其自己管理自己的生命周期,从而减少内存泄露和崩溃的可能性。生命周期库是其他架构组件(如 LiveData)的基础。
    android.arch.lifecycle 包提供了类和接口允许你构建生命周期感知(lifecycle-aware)的组件——可以基于当前activity或fragment生命周期自动调节它们的行为的组件。
    了解更多 Lifecycles 相关内容:
    https://developer.android.google.cn/topic/libraries/architecture/lifecycle.html

    LiveData
    LiveData 是一款基于观察者模式的可感知生命周期的核心组件。LiveData 为界面代码 (Observer)的监视对象 (Observable),当 LiveData 所持有的数据改变时,它会通知相应的界面代码进行更新。同时,LiveData 持有界面代码 Lifecycle 的引用,这意味着它会在界面代码(LifecycleOwner)的生命周期处于 started 或 resumed 时作出相应更新,而在 LifecycleOwner 被销毁时停止更新。通过 LiveData,开发者可以方便地构建安全性更高、性能更好的高响应度用户界面。
    了解更多 LiveData 相关内容:
    https://developer.android.google.cn/topic/libraries/architecture/livedata.html

    ViewModel
    ViewModel 将视图的数据和逻辑从具有生命周期特性的实体(如 Activity 和 Fragment)中剥离开来。直到关联的 Activity 或 Fragment 完全销毁时,ViewModel 才会随之消失,也就是说,即使在旋转屏幕导致 Fragment 被重新创建等事件中,视图数据依旧会被保留。ViewModels 不仅消除了常见的生命周期问题,而且可以帮助构建更为模块化、更方便测试的用户界面。
    了解更多 ViewModel 相关内容:
    https://developer.android.google.cn/topic/libraries/architecture/viewmodel.html

    Room
    Room是一个基于SQLite对象映射层ORM的数据库框架,类似于greenDao等。 Room 可以和 LiveData 集成在一起,提供可观测数据库并感知生命周期的对象。Room 集简洁、强大和可靠性为一身,在管理本地储存上表现卓越。由于Room是官方推出的,还是有必要了解。
    了解更多 Room 相关内容:
    https://developer.android.google.cn/topic/libraries/architecture/room.html

    以上只是简单的介绍Android架构组件的相关内容,我们先学会怎么使用,然后再深入的分析。

    3 Android Architecture Components实战

    想要阅读Android架构组件的Demo,可以参考官方推出一个示例工程
    https://github.com/googlesamples/android-architecture-components 参考其BasicSample即可。
    但是由于官方的Demo中使用了DataBinding,因此个人觉得Demo还是稍微有些冗余。可以来一个更简洁的Demo来演示各个组件的用法。

    1 将android support组件升级到26.1.0版本以后,保证fragment activity等组件实现了Lifecycles等接口

    2 build.gradle配置文件下添加以下依赖
    由于google已经正式发布了Android Architecture Components 1.0版本,我们就可以添加以下依赖了

        compile "android.arch.lifecycle:runtime:1.0.0"
        compile "android.arch.lifecycle:extensions:1.0.0"
        annotationProcessor "android.arch.lifecycle:compiler:1.0.0"
        compile "android.arch.persistence.room:runtime:1.0.0"
        annotationProcessor "android.arch.persistence.room:compiler:1.0.0"
        testCompile "android.arch.persistence.room:testing:1.0.0"

    3 根据官方的Demo介绍,其代码结构和目录如下:
    这里写图片描述

    我们也仿照这个目录结构,新建的Demo工程最终目录如下:
    这里写图片描述

    下面我们分别来看UI下的代码:
    ArchitectureActivity.java

    /**
     * @author Created by qiyei2015 on 2018/1/13.
     * @version: 1.0
     * @email: 1273482124@qq.com
     * @description:
     */
    public class ArchitectureActivity extends BaseActivity {
    
        /**
         * 标题栏
         */
        private CommonTitleBar mTitleBar = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            initData();
            if (savedInstanceState == null) {
                ProductListFragment fragment = new ProductListFragment();
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.fragment, fragment, ProductListFragment.TAG).commit();
            }
            initView();
        }
    
    
        @Override
        protected void initContentView() {
            setContentView(R.layout.activity_architecture);
        }
    
        @Override
        protected void initView() {
            mTitleBar = new CommonTitleBar.Builder(this)
                    .setTitle("Android 架构组件")
                    .setRightText("维护中")
                    .build();
        }
    
        @Override
        protected void initData() {
    
        }
    
    
        @Override
        public void onClick(View v) {
    
        }
    
    }

    代码很简单,主要是UI部分的显示逻辑,显示标题栏和显示一个fragment即可。接下来看fragmeng 的逻辑

    /**
     * @author Created by qiyei2015 on 2018/1/13.
     * @version: 1.0
     * @email: 1273482124@qq.com
     * @description:
     */
    public class ProductListFragment extends Fragment {
    
        public static final String TAG = "ProductListFragment";
    
        private TextView mTextView;
        private RecyclerView mRecyclerView;
    
        private ProductListViewModel mViewModel;
    
        ProductAdapter productAdapter;
    
        @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            mViewModel = ViewModelProviders.of(this).get(ProductListViewModel.class);
            mViewModel.init("2");
    
            mViewModel.getProducts("id").observe(this, new Observer<List<Product>>() {
                @Override
                public void onChanged(@Nullable List<Product> products) {
                    productAdapter.setDatas(products);
                    mTextView.setText("测试 :" + products.size());
                }
            });
        }
    
        @Nullable
        @Override
        public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_product_list,container,false);
            mTextView = rootView.findViewById(R.id.tv1);
            mRecyclerView = rootView.findViewById(R.id.recycler_view);
    
            mTextView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mViewModel.setTest("2");
                }
            });
    
            productAdapter = new ProductAdapter(getContext(),new ArrayList<>(),R.layout.recyclerview_item);
    
            mRecyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
    
            mRecyclerView.setAdapter(productAdapter);
    
            productAdapter.setOnItemClickListener(new OnItemClickListener<Product>() {
                @Override
                public void click(View view, Product product,int position) {
                    ToastUtil.showShortToast(product.getName());
                }
            });
    
            return rootView;
        }
    }

    fragment中持有ProductListViewModel的引用,同时会对ProductListViewModel做初始化,另外获取到了LiveData,使其注册了一个观察者,监听当LiveData中数据改变时通知UI层
    接下来看ViewModel中代码。

    /**
     * @author Created by qiyei2015 on 2018/1/13.
     * @version: 1.0
     * @email: 1273482124@qq.com
     * @description:
     */
    public class ProductListViewModel extends ViewModel {
    
        private String mId;
    
        private ProductRepository mRepository;
    
        public void init(String id){
            mId = id;
            mRepository = new ProductRepository(id);
        }
    
        public LiveData<List<Product>> getProducts(String id){
            return mRepository.getProducts(id);
        }
    
        public void setTest(String id){
            mRepository.setTest(id);
        }
    
    }
    

    很简单,持有ProductRepository 的引用,同时将数据的操作转发给ProductRepository 。

    ProductRepository 中主要负责组织管理数据,这里我并没有增加网络获取数据或者从Room中获取数据的操作,个人觉得这一块的代码相对来说比较单一。

    /**
     * @author Created by qiyei2015 on 2018/1/13.
     * @version: 1.0
     * @email: 1273482124@qq.com
     * @description:
     */
    public class ProductRepository {
    
        private MutableLiveData<List<Product>> mProducts;
        List<Product> list = new ArrayList<>();
    
        public ProductRepository(String id) {
            mProducts = new MutableLiveData<>();
        }
    
        /**
         * @return {@link #mProducts}
         */
        public MutableLiveData<List<Product>> getProducts(String id) {
            for (int i = 0 ;i < 10;i++){
                list.add(new Product("" + i,"name:" + i));
            }
            mProducts.setValue(list);
            return mProducts;
        }
    
        public void setTest(String id){
            list.add(new Product("" + id,"name:" + id));
            mProducts.setValue(list);
            ToastUtil.showLongToast("id");
        }
    
    }

    这样的一个Demo除了Room的使用没有增加到其中外,其他的都实现了。并且架构还是比较清晰。整个架构和官方的Demo的架构并无明显的区别。
    这里写图片描述

    源码参考:
    github https://github.com/qiyei2015/EssayJoke appdemo中架构部分

    4 Android Architecture Components 总结

    总体来看,Android架构组件的使用较为简单,并且将架构做了分层,架构清晰,另外对于Activity,Fragment生命周期的管理也非常出色。但是官方给的Demo实在过去简单,将Android 架构组件用于大项目中还需要一定的实践经验。个人觉得这个架构组件特别适用于UI部分的解耦。对于Android纵向架构的梳理还是不错的,类似于MVP。如果再加上组件化,插件化的横向解耦,那么对于Android整个架构的影响还是比较不错的,值得开发者去学习和尝试。
    下一期将会深入解读Android架构组件的设计以及关于这方面的思考。

    展开全文
  • Room是Google推出的Android架构组件库中的数据持久化组件库, 也可以说是在SQLite上实现的一套ORM解决方案。下面通过本文给大家介绍Android架构组件Room指南,需要的朋友参考下吧
  • Android架构师学习.txt

    2021-03-19 17:00:41
    某课,Android架构师体系课程
  • 前言 近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 ...市场真正需要的所谓「高级架构师」到底需要具备什么条件?在此和大家探讨一下 Android 工程...

    前言

    近几年,Android 开发的套路日趋成熟,越来越多的 Android 工程师获得了「高级」的称号,也有不少人在参与公司的 App 从无到有再到火爆的整个开发过程中,顺理成章地拿到了 Leader 职位。

    但对于自己的水平,多数人却并不满意,甚至有不少人觉得自己的水平被同事和老板「高估」了。

    市场真正需要的所谓「高级架构师」到底需要具备什么条件?在此和大家探讨一下 Android 工程师在当下这个时代该如何真正的成为高级架构师

    目录

    1.Android初中级工程师遇到了哪些瓶颈?

    2.什么是Android架构师?

    3.最主流的Android架构师技术体系详解

    4.Android高级架构技术;如何系统化学习?

    5Android架构师的门槛,免费资料分享

    内容

    1.Android初中级工程师遇到了哪些瓶颈?

    webp

    2.什么是Android架构师?

    笼统的说,比高级工程师技术面更广,学习主动性更强,更能紧跟时代发展的就是Android架构师。Android架构师技术深度和广度都要兼顾,需要时间的积累和经验的沉淀,这里给大家看一张大厂的薪资与级别成长路线图。

    webp

    有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以加入高级架构群;457848807,免费提供视频和资料,一起学习,相互讨论。详情看文末有惊喜哦。

    3.最主流的Android架构师技术体系详解

    以前我们一直被公司和技术牵着走,并不是自己在选择技术,而是不自觉地被推到了现在尴尬的处境。想想有多少人对于自己将来要发展的方向和技术类型进行过深入思考和比较呢?

    今天,就为大家整理一份目前互联网公司最主流的Android开发架构技术。

    • Flutter专题

    混合开发的flutter现在已经逐渐变成了主流的混合开发框架,另外由于阿里系的强大存在,导致阿里 系的公司都在用Weex混合架构,这些都是一个Android工程师开拓视野,走向未来必不可少的基本技能

    • 资深ui设计师

    学习自定义控件与Android9.0最新的适配技术

     

    • 性能调优

    我们不仅仅对项目要运筹帷幄,还要能解决一切性能问题。只有具备深厚的代码功底,深入学习源码原理以及使用工具进行测试和检查调优,才能达到知其然,知其所以然的效果。

    • 移动架构师专题项目实战

    架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。

    4.Android高级架构技术;如何系统化学习?

    1.阿里P8级Android架构师技术脑图;查漏补缺,体系化深入学习提升(详细脑图请文末领取)

    2.全套体系化高级架构视频;七大主流技术模块,视频+源码+笔记

    webp

    3.设计面试和数据结构算法专题;大厂必会,巩固基础

    • 设计模式专题;

      webp

    • 数据结构算法专题;

      webp

    4.一线互联网Android面试题含详解(初级到高级专题)

    webp

    Android架构师的门槛,有没有免费学习资料?

    有Android开发3-5年基础,希望突破瓶颈,成为架构师的小伙伴,可以加入高级架构群;457848807,免费提供以上学习资料高清思维图,欢迎进群,互相讨论。

    展开全文
  • android架构框架设计

    千次阅读 2019-06-27 10:32:58
    为了开发效率,记录一下自己的开发框架,整体使用mvvm的模式,使用android自带的databinding开发数据驱动的页面逻辑。 大致分为几个部分,common存放一般在各个模块都会用到的类,module是项目模块,主要是业务...

    为了开发效率,记录一下自己的开发框架,整体使用mvvm的模式,使用android自带的databinding开发数据驱动的页面逻辑。
    项目组成
    大致分为几个部分,common存放一般在各个模块都会用到的类,module是项目模块,主要是业务模块,如user用户模块,user下有有三个包ui/model/viewCtrl ui存放该模块下的Activity,viewCtrl存放的是业务处理逻辑类,用过databinding的都知道,databing可以绑定类,viewCtrl就是界面视图的逻辑类,model存放数据模型。network是网路框架,utils是工具包,views是自定义的view
    github地址:temp模板地址
    项目适配的方案是以限定符进行适配,以screeMatch工具批量生成。参考
    项目中所用到三方库:

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.zjhc.jxzq.temp"
            minSdkVersion 15
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
            javaCompileOptions {
                annotationProcessorOptions {
                    arguments = [moduleName: project.getName()]
                }
            }
        }
        dataBinding {
            enabled = true
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                buildTypes {
                    release {
                        //是否开启zip优化
                        zipAlignEnabled true
                        minifyEnabled false
                        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                        applicationVariants.all { variant ->
                            variant.outputs.all { output->
                                def outputFile = output.outputFile
                                def fileName
                                if(outputFile != null && outputFile.name.endsWith('.apk')){
                                    if(variant.buildType.name.equals('release')){
                                        fileName = "App${defaultConfig.versionName}.apk"
                                    }else if(variant.buildType.name.equals('debug')){
                                        fileName  =  "App${defaultConfig.versionName}_debug.apk"
                                    }
                                    outputFileName = fileName
                                }
    
                            }
                        }
                    }
                }
            }
        }
    
    }
    
    dependencies {
    
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.2'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
        compile 'com.android.support:design:27.1.1'
        //ARouter
        annotationProcessor 'com.alibaba:arouter-compiler:1.1.2'
        compile 'com.alibaba:arouter-api:1.2.1'
        //底部导航栏
        implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.3'
        //沉浸式布局
        compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
        //retrofit+rxjava
        compile 'com.squareup.retrofit2:retrofit:2.1.0'
        compile 'com.squareup.retrofit2:converter-gson:2.1.0'
        compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'
        compile 'io.reactivex.rxjava2:rxjava:2.1.0'
        compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
        compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
        implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'
        //gson
        compile 'com.google.code.gson:gson:2.8.0'
        //mvvm的recycleview的封装
        compile 'me.tatarka.bindingcollectionadapter2:bindingcollectionadapter:2.1.0'
        compile 'me.tatarka.bindingcollectionadapter2:bindingcollectionadapter-recyclerview:2.1.0'
        //强大的 RecyclerView 适配器
        compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.22'
        //glide
        implementation 'com.github.bumptech.glide:glide:3.5.2'
        //SwipeToLoadLayout 下拉刷新控件
        compile 'com.github.Aspsine:SwipeToLoadLayout:1.0.4'
    }
    
    

    项目中使用ARouter框架进行页面跳转,注意,ARouter的路径必须两级以上。
    框架中的重点是对于网络和列表加载的封装,网路参考这篇参考

    //列表使用方法
     <data>
            <import type="me.tatarka.bindingcollectionadapter2.LayoutManagers" />
            <variable
                name="viewCtrl"
                type="com.zjhc.jxzq.jxzq.module.home.viewCtrl.SearchCompanyCtrl" />
        </data>
     <com.aspsine.swipetoloadlayout.SwipeToLoadLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:listener="@{viewCtrl.listener}">
    
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/swipe_target"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    app:addItemDecoration="@{viewCtrl.viewModel.type}"
                    app:itemBinding="@{viewCtrl.viewModel.onItemBind}"
                    app:items="@{viewCtrl.viewModel.items}"
                    app:layoutManager="@{LayoutManagers.linear()}" />
            </com.aspsine.swipetoloadlayout.SwipeToLoadLayout>
    

    在框架中大量使用了自定义属性BindingAdapter,app:listener实现了下拉刷新,上拉加载的方式, app:addItemDecoration实现了列表的分隔符,app:itemBinding绑定item布局, app:items绑定数据源, app:layoutManager实现列表布局方式。参考
    项目中对于应用生命周期的管理在MyApplication中实现:

    this.registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
                @Override
                public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                    addActivity(activity);
                }
    
                @Override
                public void onActivityStarted(Activity activity) {
                }
    
                @Override
                public void onActivityResumed(Activity activity) {
                    if(mActivity == null){
                        mActivity = activity;
                    }else{
                        if(mActivity != activity){
                            mActivity = activity;
                        }
                    }
                }
    
                @Override
                public void onActivityPaused(Activity activity) {
                }
    
                @Override
                public void onActivityStopped(Activity activity) {
                }
    
                @Override
                public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
                }
                @Override
                public void onActivityDestroyed(Activity activity) {
                    removeActivity(activity);
                }
            });
            //添加actiivty
        public void addActivity(Activity actiivty){
            if(!activityList.contains(actiivty)){
                activityList.add(actiivty);
            }
        }
        //销毁单个Activity
        public void removeActivity(Activity activity){
            if(activityList.contains(activity)){
                activityList.remove(activity);
            }
        }
        //销毁所有的activity
        public static  void removeAllActivity(){
            for(Activity activity :activityList){
                activity.finish();
            }
        }
    

    以lifecycle管理生命周期,在Activity创建时添加,如果需要每次打开手势验证,可以对存储的activity进行进行判断,是否加载手势页。注意,使用dialog的时候请勿使用application中存储的activity,因为页面的不可见会导致dialog创建失败。
    为了项目的性能与调试,统一管理项目的常量属性存储于BaseParm和Constant中。为了后期维护,主要勤写注释,类的使用需要注明类的用途,单层调用可以写上{@link 调用它的类} 以link链接到调用此类的方法便于调试。

    /**
     * @Author 作者
     * @Date 2018/7/6.
     * @Description 类的作用
     * {@link 类名 }
     */
    
    展开全文
  • android系统架构

    2018-08-15 14:49:52
    android 的系统架构图,设计工作者可查阅————————————————————————————
  • Android架构组件-App架构指南

    万次阅读 多人点赞 2017-11-08 00:55:21
    与传统的桌面应用程序不同,Android应用程序的结构要复杂得多,在大多数情况下,它们只在桌面快捷启动方式中有一个入口,并且作为单个进程运行。一个典型的Android应用程序是由多个 app组件(Android四大组件) 构成的...
  • Android 架构文章合集携程携程Mobile架构演化(视频)携程Android App插件化和动态加载实践阿里陶钧谈淘宝客户端应用框架实践QCon旧金山演讲总结:阿里无线技术架构演进手机淘宝构架演化实践手机淘宝Android客户端架构...
  • 《最强Android书:架构大剖析》通过实验而不是源码,将Android 系统层层拆解,令读者深刻透彻地掌握Android 系统的内部技术:以init 进程为切入点详细阐述了Android 的启动过程和关键服务;从Android 作为资源协调者...
  • 企业级android架构与开发课程
  • Android架构文章集合

    2016-12-18 15:38:33
    安卓架构文章合集(a collection of android Architecture) fork from :https://github.com/Juude/Awesome-Android-Architecture!!! 博客原地址: 简书博客 github地址: ...
  • 支付宝 Android 架构

    2015-08-31 14:12:28
    支付宝 Android 架构体系
  • Android架构基本知识 Android架构基本知识 的系统架构 1.2 Android 的系统架构 1.2 Android 系统构架 图中可 以看到从上到依次是应用层 (Applications) 应用框架层 (Application 系统构架 图中可 以看到从上到依次是...
  • Android架构设计模式

    千次阅读 2019-02-24 13:43:05
    架构设计模式 MVC Model 模型层,负责处理数据加载或者存储 View 视图层,负责界面数据展示,与用户进行交互 Controller 控制器层,负责逻辑业务处理 优点 耦合性低 重用性高 生命周期成本低 部署快 可维护性高 ...
  • Android架构设计模式总结(MVX)

    千次阅读 2017-02-20 11:42:48
    Android架构设计模式总结(MVX)一、安卓软件架构设计的目的通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合。这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 200,547
精华内容 80,218
关键字:

android架构