Android 知识整理

开新版本啦,老版本写的内容太多了,我自己找起来都麻烦了,遂决定像代码一样,文章臃肿了就要抽象封装了,相近内容程提炼成一篇汇总性的文章,然后我们再加点设计模式上来,提供一个单例的全局入口,方便使用定位。程序员最好把程序思维带到生活里来,这样有助于我们消化提炼程序思维

架构

架构方面的资料很多,这个结合设计模式提了各种开源库:Android进阶之旅-系统架构


老版本

Android 的点太多了,大的、小的,新的、旧的,总是目不暇接,总结整理下也好自己查好。话说自己写的文章过百了,也不怎么好找了,哈哈,虽然写的不咋地,没人看......

里面有不少半成品,开了好多坑都没天上,大家见谅......

常用占坑:

日常大图鞭策自己,还有如此多的内容呢



content 启动特性图:

  • 数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task,一般情况不推荐;
  • 数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用;
  • 数字3:在Receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值

java 基础


Kotlin

原来这里有一大堆话,但是写的有点多,提出来写了一篇
* kotlin - 概述
* kotlin - 基础语法
* kotlin - 函数(对象函数/代码补全)
* kotlin - 高级特性
* kotlin - Coroutine 协程
* kotlin - 代码片段


Android 基础

Android 的小块的知识点是太多,太复杂了,平时必须多加记录,整理才能玩的转 Android ,要不有时你会不自然的萌逼一下的,哇哈哈哈....我就长长这样,狗屎吃过了,自然知道改了。

扫盲篇都是一些基础的生僻知识点:

梳理篇:

有的点实在太讨厌,零零碎碎的点总是很多,一次又学不完,搞不清所有,只能靠水磨工夫去学个圆满


Activity:

Activity 是我们接触最多的了,下面这篇对 Activity 声明周期变化,launchMode,configChanges ,传参都有比较好的解释

关于 ActivityTask 栈,建议大家去看《android 开发艺术探索》,这里面介绍的最正确


Android 疑难杂症处理

android 开发中总是会碰到一些很难解决的疑难杂症,很顽强,很难根治,大多数时候迪欧不知道为什么。


Android Framework

Android 框架层很难看,尤其是系统逻辑晦涩难懂,但是面试,笔试时肯定会碰到,尤其像 launch Activity ,activty 显示流程是必会的,涉及到 AMS,WMS,双向AIDL通讯,window,windowManage,viewRootImpl,N多复杂的过程

推荐大家看 CSDN:kc专栏 的文章,里面涉及很多内容,需要的一般都有,尤其是 android 显示 Surface 这块,分析的很深入,值得学习


Android 进阶篇


我的开源库

在组件化,平台化的今天,我们被要求同一个功能可以在多个 app 项目中复用,这就要求我们必须对功能进行框架级别的封装,也就是把 app 中的一个个包 变成一个活多个 module 组件。这立马就要求开发人员要有至少水平线的代码封装,框架封装能力,封装封装,这真不是说说的,真的是一下子对 android 开发的功底要求就高了起来了,没有相关经验基础的同学真的会无所适从啊,我是深有体会啊,这里分享下自己封装的一些简单的功能组件,算是给大家提供一个思路吧,因为我知道我自己也是个半拉子水平

随着时间的推移,我找到了一些管理如何开发第三方库的指导,都是别人思虑很久后形成的文字,很值得大家没事去看看


UI

Android 的 UI 可不仅仅是狭隘的控件,布局,更是涉及到产品设计的思想,app 开发人员为啥不能去了解产品设计,UI 设计,这些了解了才能优雅,恰当的和 UI 猫,产品汪去沟通,鄙视这些小动物,要不你都不知道怎去喷...........看我的怨念......

LinearLayoutManager manager = new LinearLayoutManager(getContext());
manager.setOrientation(LinearLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(manager);
LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(mRecyclerView);

开源库

  • 音视频开发
  1. Vitamio 播放器
    Vitamio 支持 RTMP/RTSP/FLV/HLS(m3u8)/MMS

RTMP 是早期 flash 的,RTSP 系统自带的 VideoView 就能支持,HLS 是基于 http/https 的,MMS 适用于电台,网络广播

    Vitamio.initialize(this)

    mVideoView = (VideoView) findViewById(R.id.vitamio_videoView);
    path = "rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov";
    mVideoView.setVideoPath(path);
    mVideoView.setMediaController(new MediaController(this));
    mVideoView.requestFocus();

    mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mediaPlayer) {
            mediaPlayer.setPlaybackSpeed(1.0f);
        }
    });
  1. 饺子播放器
  1. 音频录制

app 架构

Android 的架构不是一成不变的,发展也是很快的。最近出了很多架构思想,无论是最初的MVC, 还是近几年风头极盛的MVP, Google推出的MVVM,还是系统层面的组件化,模块化,插件化;最终遵循的架构原则无非就是三点:

  1. 横向划分模块
  2. 纵向划分层次
  3. 解耦通信

代码架构最终实现目的是什么?

  1. 解耦
  2. 复用
  3. 可读性
  4. 健壮性
  5. 提高并行开发效率

移动架构分广义和狭义,光以上讲是划分子系统,狭义上讲是代码分层。

所谓架构,无非两个方面: 分层和通信方式。

想对架构有个总体了解,推荐大家看 DevCW 写的这 3 篇文章:

大家对于 clean 架构可能不是很清晰,大家看这里,这里有比较详细的 mvc.mvp.clean.aac 对比


优化

Android 的优化的点很多的,UI,架构,框架性能,持续集成能力,平台化能力,是否易于修改,是否易于扩展....所以做好 Android 的优化,我们首先要了解很多偏底层的知识点,这些知识点也是很零碎的

优化的前提至少我们得知道 android 是怎么显示的不是,CPU 把 UI 组件计算成 Polygons 多边形 和 Texture 纹理,然后交给 GPU 进行栅格化渲染


持续集成 、 组件化,平台化

16年时的插件化,组件化,热修复是多火,很多人其实对其发展历史不是很了解,有兴趣的朋友看这篇,大牛写的

这篇文章是从前端角度来说的,我喜欢期中的思想,这是阿里的分享,包括 Code Review ,状态(包含数据和变化)这个词, 还有 CR 的思路,流程,内部间 CR 的协作,组织,很赞


通用技术和开发工具支持


资源


感悟

Android 学习,工作的过程中总是有很多感受,感悟,甚至是恍然大悟,这些瞬间的感觉总是一闪而逝,保存不久,无法记忆,所以我希望用文字尽量多的保留那份感悟,以待之后可以常悟常新。还有很多别人的感悟,经验,这些放在一起。


面试


第三方集成经验


android 中处理 carsh 使用 Thread.UncaughtExceptionHandler 来截获错误并进行自己的逻辑处理

public class CrashHandler implements Thread.UncaughtExceptionHandler {

    @Override
    public void uncaughtException(Thread thread, Throwable ex) {
    //回调函数,处理异常出现后的情况
    }
}

我们在里面可以重启 app 或是打印错误信息到本地,详细:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容