android纯干货

作者: 茴香豆的第五种写法 | 来源:发表于2017-05-08 11:23 被阅读0次

    1:svn在什么情况下会导致一个文件提交不了

    2:git分支的原理,和svn有什么区别

    3:LeakCanary是哪个开发的

    4:什么是注解

    5:Butter Knife中最新的采用的是什么原理?

    6:rx+retrofit在网络请求后返回的格式是什么格式?怎么用rx统一封装后台返回的{result:200,data:xxxx},表单提交时候的关键字是什么

    7:反射时候是否可以反射到私有属性?

    8:自定义控件中分为哪几种,android内核启动的原理过程描述.

    9:热修复的原理

    10:减小apk的方法有哪些


    1:svn在什么情况下会导致一个文件提交不了?

    假设a,b用户和服务器,服务器对于text.class文件的版本号是20,然后a,b用户也是版本为20的text.class,这时候如果b用户在text.class中添加了文件,然后提交服务器,此时服务器的text.class版本为21,当a用户执行修改本地text.class时候然后提交就是提示冲突,因为a用户当面的text.class为20,解决办法就是update或者对当前文件revert.

    2:git分支的原理,和svn有什么区别

    通过可变指针来实现对提交数据的历史版本的控制,每当我们提交新的更新,当前分支(设为master)则指向最后一个提交更新A,而最后一个提交对象则存在一个指针指向前一次的提交更新Q。如果我们创建一个新的分支,child,它和master共同指向A,这时,如果我们向child分支提交更新B,我们会发现child指向B,而master依然指向A。无论我们在child分支进行了任何开发,只要回到master分支,就能恢复到更新A的数据状态了。区别就是1.GIT是分布式的,SVN不是;2.GIT把内容按元数据方式存储,而SVN是按文件;3:GIT分支和SVN的分支不同;4.GIT没有一个全局的版本号,而SVN有;5.GIT的内容完整性要优于SVN

    3:LeakCanary是哪个开发的

    LeakCanary项目是square公司为Java&Android开发提供的一个自动检测内存泄漏的工具

    4:什么是注解

    用来对这些元素进行说明,注释,注解是以‘@注解名’在代码中存在的,1:【生成文档doc文档】2:【使用反射】3:实现基本的编译检查【Override】

    5:Butter Knife中最新的采用的是什么原理?

    Butter Knife最新version:8.2.1,以前的版本通过反射,大量使用反射会影响App的运行性能,造成卡顿以及生成很多临时Java对象更容易触发GC,现在通过Java Annotation Processing技术,就是在Java代码编译成Java字节码的时候就已经处理了@Bind、@OnClick(ButterKnife还支持很多其他的注解)这些注解了.

    6:rx+retrofit在网络请求后返回的格式是什么格式?怎么用rx统一封装后台返回的{result:200,data:xxxx},表单提交时候的关键字是什么

    rxjava中统一的返回对象都是Subscriber对象

    public classBase CallModel {

    public int errno;

    public String msg;

    public T data;

    }

    @GET("user/login")

    Calll  <CallModel<User>> doLogin(@Query("email") String email,@Query("password") String pwd);

    多文件上传:

    @Multipart

    @POST("upload")

    xxx

    多参数表单:

    @FormUrlEncoded

    @POST("login")

    xxx

    7:反射时候是否可以反射到私有属性?

    可以;在访问前防止检查访问权限.

    Method method = classType.getDeclaredMethod("sayHello",newClass[] { String.class});

    method.setAccessible(true);//抑制Java的访问控制检查

    8:自定义控件中分为哪几种,android内核启动的原理过程描述.

    1:自绘控件,实现ondraw()

    2:组合控件

    3:继承控件

    启动原理:

    ActivityManagerServices,简称AMS,服务端对象,负责系统中所有Activity的生命周期

    ActivityThread,App的真正入口。当开启App之后,会调用main()开始运行,开启消息循环队列,这就是传说中的UI线程或者叫主线程。与ActivityManagerServices配合,一起完成Activity的管理工作

    ApplicationThread,用来实现ActivityManagerService与ActivityThread之间的交互。在ActivityManagerService需要管理相关Application中的Activity的生命周期时,通过ApplicationThread的代理对象与ActivityThread通讯。

    ApplicationThreadProxy,是ApplicationThread在服务器端的代理,负责和客户端的ApplicationThread通讯。AMS就是通过该代理与ActivityThread进行通信的。

    Instrumentation,每一个应用程序只有一个Instrumentation对象,每个Activity内都有一个对该对象的引用。Instrumentation可以理解为应用进程的管家,ActivityThread要创建或暂停某个Activity时,都需要通过Instrumentation来进行具体的操作。

    ActivityStack,Activity在AMS的栈管理,用来记录已经启动的Activity的先后关系,状态信息等。通过ActivityStack决定是否需要启动新的进程。

    ActivityRecord,ActivityStack的管理对象,每个Activity在AMS对应一个ActivityRecord,来记录Activity的状态以及其他的管理信息。其实就是服务器端的Activity对象的映像。

    TaskRecord,AMS抽象出来的一个“任务”的概念,是记录ActivityRecord的栈,一个“Task”包含若干个ActivityRecord。AMS用TaskRecord确保Activity启动和退出的顺序。如果你清楚Activity的4种launchMode,那么对这个概念应该不陌生。

    9:热修复的原理

    资源替换

    类替换(四大组件、类)

    SO补丁

    PathClassLoader:通过Context getClassLoader()获取。

    DexClassLoader:通过构造函数new DexClassLoader()获取。

    10:减小apk的方法有哪些


    压缩图片,对图片进行有损压缩;

    放弃一些图片资源;

    so在gradle中配置

    开启gradle minifyenabled:ture

    ....................

    相关文章

      网友评论

        本文标题:android纯干货

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