美文网首页
技术总结

技术总结

作者: ben大福 | 来源:发表于2019-03-08 18:13 被阅读0次

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

    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

    算法

    相关文章

      网友评论

          本文标题:技术总结

          本文链接:https://www.haomeiwen.com/subject/ihldpqtx.html