Android是使用任务(task)来管理Activity的,一个任务就是一组存放在栈里的Activity
的集合,这个栈也被称作返回栈(back stack)。
每个Activity在其生命周期中最多可能会有4种状态。
运行状态
当一个Activity位于返回栈的栈顶时,Activity就处于运行状态
暂停状态
当一个Activity不再处于栈顶位置,但仍然可见时,Activity就进入了暂停状态。
停止状态
当一个Activity不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。
销毁状态
一个Activity从返回栈中移除后就变成了销毁状态。
Activity的生命周期
Activity 的启动模式
启动模式一共有4种,分别是standard、singleTop、singleTask和singleInstance,可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。
with 函数接收两个参数:第一个参数可以是一个任意类型的对象,第二个参数是一个Lambda表达式。with函数会在Lambda表达式中提供第一个参数对象的上下文,并使用Lambda表达式中的最后一行代码作为返回值返回。
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val builder = StringBuilder()
builder.append("Start eating fruits.\\n")
for (fruit in list) {
builder.append(fruit).append("\\n")
}
builder.append("Ate all fruits.")
val result = builder.toString()
println(result)
👇
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val result = with(StringBuilder()) {
append("Start eating fruits.\\n")
for (fruit in list) {
append(fruit).append("\\n")
}
append("Ate all fruits.")
toString()
}
println(result)
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val result = StringBuilder().run {
append("Start eating fruits.\\n")
for (fruit in list) {
append(fruit).append("\\n")
}
append("Ate all fruits.")
toString()
}
println(result)
val list = listOf("Apple", "Banana", "Orange", "Pear", "Grape")
val result = StringBuilder().apply {
append("Start eating fruits.\\n")
for (fruit in list) {
append(fruit).append("\\n")
}
append("Ate all fruits.")
}
println(result.toString())
定义静态方法
Kotlin 定义静态方法并没有Java那种直接一个static关键字就可以定义静态方法的方式。而是用静态类 object Util和companion object{}来满足静态类的研发需求:
object Util {
fun doAction() {
println("do action")
}
}
class Util {
fun doAction1() {
println("do action1")
}
companion object {
fun doAction2() {
println("do action2")
}
}
}
如果你确确实实需要定义真正的静态方法, Kotlin仍然提供了两种实现方式:注解和顶层方法。
注解方式:
class Util {
fun doAction1() {
println("do action1")
}
companion object {
@JvmStatic
fun doAction2() {
println("do action2")
}
}
}
注意,@JvmStatic注解只能加在单例类或companion object中的方法上,如果你尝试加在
一个普通方法上,会直接提示语法错误。
顶层方法:
指的是那些没有定义在任何类中的方法,比如我们在上一节中编写的main()方法。
Kotlin编译器会将所有的顶层方法全部编译成静态方法,因此只要你定义了一个顶层方法,
那么它就一定是静态方法。