GithubHelp home page GithubHelp logo

android-advanced-light's Introduction

Android进阶三部曲第一部《Android进阶之光》源码

1059158635_副本.jpg

源码目录介绍

目录 简介
chapter_1 第1章 Android新特性
chapter_2 第2章 Material Design
chapter_3   第3章 View体系与自定义View
无源码  第4章 多线程编程
chapter_5 第5章 网络编程与网络框架
无源码  第6章 设计模式
chapter_7   第7章 事件总线
chapter_8 第8章 函数响应式编程
chapter_9 第9章 注解与依赖注入框架
chapter_10   第10章 应用架构设计
无源码  第11章 系统架构与MediaPlayer框架

本书内容

本书共分为11章。
第1章介绍Android 5.0、Android 6.0、Android 7.0的新特性,包括Android 5.0的RecyclerView、Android 6.0的运行时权限机制和Android 7.0的多窗口模式等知识点。
第2章介绍Material Design以及Design Support Library常用的控件,并给出实例将Design Support Library中的常用控件结合在一起使用。
第3章介绍View相关的进阶知识,包括View的滑动、View的事件分发和View的工作流程。最后结合以上知识点来介绍自定义View。
第4章介绍多线程编程。本章不仅包括基础的线程知识,还会介绍线程同步和线程池等进阶知识点,最后结合这些知识点来分析Android 7.0的AsyncTask的源码。
第5章介绍网络编程的基础知识以及常用的网络框架:Volley、OKHttp和Retrofit的使用方法和原理分析。
第6章将设计模式进行分类,并介绍每个分类中常用的设计模式。
第7章介绍事件总线EventBus和otto的使用方法和原理。
第8章介绍函数响应式编程RxJava的使用方法,包括RxJava的基本使用、操作符、使用场景和源码分析等知识点。
第9章介绍注解的知识点和依赖注入框架ButterKnife和Dagger2的使用方法以及原理。
第10章介绍Android应用架构设计,包括MVP框架以及MVP结合RxJava和Dagger2,MVVM框架相关的Data Binding支持库。
第11章主要是指引读者进行Android系统源码阅读并带其入门,介绍Android系统框架、源码目录和阅读源码工具,并以分析MediaPlayer框架的源码作为示例。

后续内容

由于本书篇幅有限,我还有很多想要讲的技术知识无法在本书中展现,这些技术知识我会继续在自己的博客和微信公众号上分享出来。如果感兴趣,你可以继续关注我的博客和微信公众号,或者购买Android进阶三部曲第二部《Android进阶解密》。
独立博客:http://liuwangshu.cn
CSDN博客:https://liuwangshu.blog.csdn.net/
QQ群:499174415

分享Android、Java和大前端相关技术。

License

© 2017 刘望舒. This code is distributed under the MIT license.

android-advanced-light's People

Contributors

henrymorgen avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-advanced-light's Issues

第5章 222页

第5 中 new BitmapCache 这个参数有问题吧?这个引用的是哪个类? ImageLaoder中的这个参数是ImageCache.

public ImageLoader(com.android.volley.RequestQueue queue, com.android.volley.toolbox.ImageLoader.ImageCache imageCache) { /* compiled code */ }

第4章194页

第6行:“另外,任务队列采用了无界阻塞队列LinkedBlockingQueue”
前面不是说LinkedBlockingQueue是“由链表结构组成的有界阻塞队列”么,到底哪个是对的呢?

还有想问下作者QQ群为什么不给进了?

第6章 275页

双重检查者模式中

instance ==null 应该是 singleton==null 吧

第4章166页

1、第4章,166页倒数第5行,“使用多线程后可以把这这个耗时的线程分配到一个单独的线程中去执行”==>“使用多线程后可以把这这个耗时的操作分配到一个单独的线程中去执行”。个人理解应该是把“线程”改成“操作”。

2、第4章,166页倒数第2行,“如果使用单个进程”==>“如果使用单个线程”

第2章 103页

FooterBehavior中的onNestedPreScroll回调方法:

 @Override
    public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) {
        if (dy > 0 && directionChange < 0 || dy < 0 && directionChange > 0) {
            child.animate().cancel();
            directionChange = 0;
        }
        directionChange += dy;
        if (directionChange > child.getHeight() && child.getVisibility() == View.VISIBLE) {
            hide(child);
        } else if (directionChange < 0 && child.getVisibility() == View.GONE) {
            show(child);
        }
    }

经过实测,给view设置 View.GONE之后,view就不再能接收onNestedPreScroll回调了;

另一方面,用child.getVisibility()来判断执行hide和show动画也有不妥之处:

private void hide(final View view) {
        ViewPropertyAnimator animator = view.animate().translationY(view.getHeight()).setInterpolator(new FastOutSlowInInterpolator()).setDuration(200);
        animator.setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animator) {
                view.setVisibility(View.GONE);
            }
        });
        animator.start();
    }

    private void show(final View view) {
        ViewPropertyAnimator animator = view.animate().translationY(0).setInterpolator(new FastOutSlowInInterpolator()).setDuration(200);
        animator.setListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animator) {
                view.setVisibility(View.VISIBLE);
            }
        });
        animator.start();
    }

动画执行需要时间,执行完成之后才在onAnimationEnd中将view设置相应的可见状态。
问题在于 动画执行完成之前,也就是onAnimationEnd回调之前,由于view的Visibility还未更改,又会进入show和hide,重新执行动画,原先未执行完成的动画则被取消,这应该不是想要效果。

当然,我目前实现的代码使用的是最新的androidx库,而不是几年前support库,也可能是因为这个导致的差异

@{time}不是String类型

android-advanced-light/chapter_10/MoonDataBinding/app/src/main/res/layout/activity_layout.xml
91行的@{time}应该改为@{time.toString()}?

书的错别字

第124页 AT_MOST: 最大模式,对应于wrap_comtent属性。

应该是wrap_content

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.