1.Activity的生命周期
1.standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加
2.singleTop
可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
3.singleTask
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
4.singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
1.静态注册
在Android.manifest里面进行注册,通过在<intent-filter>中添加<action>来设置能接收的广播类型。静态注册的广播一旦应用程序启动,就实时处于接收广播的监听中,即使应用程序关闭了,同样能接收来自系统或其他应用程序发出的广播。
2.动态注册
在Java代码中进行注册,首先创建一个继承BraodcastReceiver的类,重写onReceive()方法;然后实例化这个类的对象,通过这个对象设置能接收的广播类型,并通过registerReceiver()方法进行注册,使用结束后调用unRegisterReceiver()方法进行解注册。动态注册的广播只能在注册之后,解注册之前进行监听,一旦解注册或者是应用程序结束,将无法再接收广播。
1.修饰类
当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。
在使用final修饰类的时候,要注意谨慎选择,除非这个类真的在以后不会用来继承或者出于安全的考虑,尽量不要将类设计为final类。
2.修饰方法
使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。
因此,如果只有在想明确禁止该方法在子类中被覆盖的情况下才将方法设置为final的。类的private方法会隐式地被指定为final方法。
3.修饰变量
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
4.深入理解final关键字
a) 类的final变量和普通变量有什么区别?
当用final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。
b) 被final修饰的引用变量指向的对象内容可变吗?
引用变量被final修饰之后,虽然不能再指向其他对象,但是它指向的对象的内容是可变的。
public boolean isExistLoop(SingleList list){ Node slow = list. head; Node fast = list. head; while(fast != null && fast.next != null){ slow = slow. next; fast = fast. next. next; if(slow == fast ){ return true; } } return false; }