美文网首页
Android基础知识

Android基础知识

作者: 猪爸爸Hulk | 来源:发表于2018-02-25 17:59 被阅读8次

    1、A-Activity跳转到B-Activity经历的生命周期

    A启动

    A-onCreate   A-onStart   A-onResume

    A跳转到B

    A-onPause   B-onCreate   B-onStart   B-onResume   A-onStop

    关闭B回到A

    B-onPause   A-onRestart   A-onStart   A-onResume   B-onStop   B-onDestory

    2、Activity的4种启动模式

    Standard

    默认的启动模式,每次启动Activity,无论任务栈中是否有该Activity实例,都会新建一个新的实例。

    SingleTop

    如果Activity已经位于栈顶,系统不会创建新的Activity实例,否者创建新的实例。

    SingleTask

    Activity在同一个Task内只有一个实例,如果Activity已经位于栈顶,系统不会创建新的Activity实例,和singleTop模式一样。但Activity已经存在但不位于栈顶时,系统就会把该Activity移到栈顶,并把它上面的activity出栈。

    SingleInstance

    启动Activity时,系统会创建一个新的任务栈,并且这个任务栈只有他一个Activity。

    Activity的onNewIntent()方法何时会被调用

    前提:ActivityA已经启动过,处于当前应用的Activity堆栈中;

    当ActivityA的LaunchMode为SingleTop时,如果ActivityA在栈顶,且现在要再启动ActivityA,这时会调用onNewIntent()方法

    当ActivityA的LaunchMode为SingleInstance,SingleTask时,如果已经ActivityA已经在堆栈中,那么此时会调用onNewIntent()方法

    当ActivityA的LaunchMode为Standard时,由于每次启动ActivityA都是启动新的实例,和原来启动的没关系,所以不会调用原来ActivityA的onNewIntent方法

    3、String、StringBuffer与StringBuilder的区别

    String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象
    StringBuffer和StringBuilder底层是 char[]数组实现的
    StringBuffer是线程安全的,而StringBuilder是线程不安全的

    4、ArrayList和LinkedList的区别

    ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

    对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

    对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

    5、Java中equals,hashcode和==的区别

    ==
    基本数据类型(byte,short,char,int,long,float,double,boolean),==比较的是它们的值。
    引用数据类型(类、接口、数组),==比较的是它们在内存中的存放地址。

    equals
    默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象)。

    hashcode
    Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的 字段等)映射成一个数值,这个数值称作为散列值。

    eqauls和hashCode的关系
    1、如果两个对象equals,Java运行时环境会认为他们的hashcode一定相等。
    2、如果两个对象不equals,他们的hashcode有可能相等。
    3、如果两个对象hashcode相等,他们不一定equals。
    4、如果两个对象hashcode不相等,他们一定不equals。

    6、抽象类和接口

    抽象类的意义
    抽象类就是为了继承而存在的,如果你定义了一个抽象类,却不去继承它,那么等于白白创建了这个抽象类,因为你不能用它来做任何事情。对于一个父类,如果它的某个方法在父类中实现出来没有任何意义,必须根据子类的实际需求来进行不同的实现,那么就可以将这个方法声明为abstract方法,此时这个类也就成为abstract类了。

    接口的意义
    1、重要性:在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力。
    2、简单、规范性:如果一个项目比较庞大,那么就需要一个能理清所有业务的架构师来定义一些主要的接口,这些接口不仅告诉开发人员你需要实现那些业务,而且也将命名规范限制住了(防止一些开发人员随便命名导致别的程序员无法看明白)。
    3、维护、拓展性:比如你要做一个画板程序,其中里面有一个面板类,主要负责绘画功能,然后你就这样定义了这个类,可是在不久将来,你突然发现这个类满足不了你了,然后你又要重新设计这个类,更糟糕是你可能要放弃这个类,那么其他地方可能有引用他,这样修改起来很麻烦,如果你一开始定义一个接口,把绘制功能放在接口里,然后定义类时实现这个接口,然后你只要用这个接口去引用实现它的类就行了,以后要换的话只不过是引用另一个类而已,这样就达到维护、拓展的方便性。
    4、安全、严密性:接口是实现软件松耦合的重要手段,它描叙了系统对外的所有服务,而不涉及任何具体的实现细节。这样就比较安全、严密一些(一般软件服务商考虑的比较多)。

    抽象类和接口区别
    1、抽象类和接口最大的区别,就是抽象类可以提供某些方法的部分实现,而接口只能定义方法,不能有方法的实现,如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而Java接口做不到这一点,如果向一个Java接口里加入一个 新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java接口的缺点。
    在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,这是抽象类的优势;接口中只能有抽象的方法。
    2、一个类只能继承一个抽象类或普通类,但能实现多个接口。

    7、View的绘制流程

    measure:对于View,measure实现其宽高的测量,对于ViewGroup,measure不仅要完成自身的测量,还要完成其子View的测量。
    layout:用于确定子元素的位置。
    draw:将View绘制在屏幕上。

    8、Android中的String、StringBuilder、StringBuffer、CharSequence

    Android中的String、StringBuilder、StringBuffer、CharSequence

    9、Canvas的常用操作速查表

    Canvas的常用操作速查表

    10、Path常用方法表

    Path常用方法表

    11、判断RecyclerView位置

    滑到最顶部时,返回false,表示不能下拉了

    RecyclerView.canScrollVertically(-1)
    

    滑到最底部时,返回false,表示不能上拉了

    RecyclerView.canScrollVertically(1)
    
    fun getScreenSizeInches(activity: Activity): Double {
            val display = activity.windowManager.defaultDisplay ?: return 0.0
            val displayMetrics = DisplayMetrics()
            display.getMetrics(displayMetrics)
    
            val dens = displayMetrics.densityDpi
    
            val x = Math.pow(displayMetrics.widthPixels.toDouble() / dens, 2.0)
            val y = Math.pow(displayMetrics.heightPixels.toDouble() / dens, 2.0)
    
            return Math.sqrt(x + y)
        }
    

    相关文章

      网友评论

          本文标题:Android基础知识

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