技术总结

   随便写点技术总结,不知道若干年后会不会有用

androidframwork

    service

        startService 启动的生命周期 oncreate->onStartCommand->ondestory 必须通过stopSelf() 或 stopService()停止服务

            多次启动会多次调用onStartCommand

        bindService  启动的生命周期 oncreate->onbind->onunbind-ondestory 执行完成自动停止服务

        https://blog.csdn.net/carson_ho/article/details/53160137

        https://www.jianshu.com/p/95ec2a23f300

    ipc  管道,socket通信,消息队列,binder机制通信(android)

        binder,内存映射 ,https://melonwxd.github.io/2017/10/28/android-ipc2/

        消息队列 远程service中handler,message,messagequeue,looper

    应用如何启动

        click调用startActivity(intent)-->通过Binder IPC机制调用activityManagerService

        -->调用grantUriPermissionLocked()判断是否有足够的权限调用activity

        -->判断ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity

        -->bindApplication 发送BIND_APPLICATION到消息队列

        -->通过handleBindApplication调用makeApplication加载app的class到内存中

        -->调用realstartactivity-->application线程中的sheduleLaunchActivity发送LAUNCH_ACTIVITY消息

        通过handleLaunchActivity()来启动activity

    应用如何加载资源

        Contentxt中有单例ResourcesManager->单例方式或去resResource

        resResource初始化 public Resources(AssetManager assets, DisplayMetrics metrics, Configuration config)方法

        assetsManager会加载资源文件

    handler原理

    jni通信  c层调用java层是用反射调用的

    点击事件分发

        oninterceptertouchevent()  (viewgroup独有的,onIntercepter返回true,会调用onTouchEvent,如果返回false,执行子view的dispatch事件)

        onDispatherTouchEvent()  (ondispatch返回true,会调用onIntercepter,返回false调用子viewdispatch事件)

        onTouchEvent();

    mesure过程

        https://juejin.im/post/5ad37c476fb9a028bc2e32af

        调getRootMeasureSpec()根据DecorView的Layoutparams和手机屏幕宽高生成DecorView的MeasureSpec

        ViewRootImpl.performTraversals()->performMesure()->


        然后调用measure调用开始测量

        DecorView.measure()->onMeasure():

        ps。如果子viewGroup没有重写measure方法,子view不会被测量,  这个viewGroup没有设置具体的宽高的话,(wrapcontent)则viewgroup就显示父容器的宽高

        ps。getChildMeasureSpec()主要是通过父容器的MeasureSpec以及子view的宽高共同决定的

    jetpack

        databind  https://juejin.im/post/5b02cf8c6fb9a07aa632146d

        lifecycle 26.1.0 AppCompatActivity已经实现,若没有则自定义

        livedata https://juejin.im/post/5bfb4d6a6fb9a049df23bc98  https://www.jianshu.com/p/29c715bbf9f0

        navigation

        paging https://juejin.im/entry/5b0d3b0251882532321468ff

        room

        viewmodel https://juejin.im/post/5a040585f265da43346f5d57

        workmanager

    android打包过程

        https://juejin.im/entry/58b78d1b61ff4b006cd47e5b

        1,aapt打包资源文件,R.java  生成的resources.arsc和res文件、assets文件

        2, 处理aidl生成对应的java接口

        3,通过javacompile生成对应的class文件

        4,通过dex命令把生成class文件和外部的class文件处理生成dex文件

        5,通过apkbuilder把资源文件和dex文件打包成apk

        6,jarsigner工具,把apk打包签名

        7,通过zipalign,进行apk对齐处理

应用项目中使用

    glide

    okhttp

        okio 底层基于okio

        OkHttpClient

        call

        Dispatcher

        Interceptor

    rxjava

    kotlin

    websocket

    x509trustmanager服务器双向认证

    processor原理与优缺点

        缺点是不能插入代码,生成代码要在自己应用中调用

    内存优化

        profile,leakcanary,  traceview,blockcanary

java基础

    hashmap与linkedhashmap对比 (linkedhashmap继承于hashmap)

    hashmap与ConcurrentHashMap,hashtable对比

    java中有几种线程池 

        CachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程

        FixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待

        ScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行

        SingleThreadExecutor: 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行

    sparseArray

        SparseArray和ArrayMap都用来替换HashMap

        适合数据量小,千级以内。过大会降低性能

        均使用二分法查找数据

        hashmap扩容会占用更多的内存

        sparseArray的key为int,ArrayMap的key为对象

    抽象类与接口区别  https://www.jianshu.com/p/038f0b356e9a

    多态的表现形式 https://blog.csdn.net/lingang1991/article/details/69905944

算法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,874评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,102评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,676评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,911评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,937评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,935评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,860评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,660评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,113评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,363评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,506评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,238评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,861评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,486评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,674评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,513评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,426评论 2 352

推荐阅读更多精彩内容