首先记录一下activity的四种启动模式
1.standard 标准模式
2.singleTop 栈顶复用模式
3.singleTask 任务栈模式
4.singleInstance 单例模式 单独启动另一个任务栈 并且任务栈中只存在一个activity
标准函数 with,run,apply函数的使用
with函数
with函数结构
val result = with(obj){
//value
}
观察以下代码
//一般写法
val list = mutableListOf("Apple", "Orange", "Banana")
val builder = StringBuilder()
builder.append("Start eating fruit...\n")
for (ls in list){
builder.append(ls+"\n")
}
builder.append("The fruit is finished...")
Log.d(TAG, "clickWith: "+builder.toString())
对StringBuilder追加字符串 发现频繁的调用了builder对象 使用with函数如下
//with StringBuilder
val withStringBuilder = with(StringBuilder()) {
append("Start eating fruit...\n")
for (ls in list) {
append(ls + "\n")
}
append("The fruit is finished...")
toString()
}
Log.d(TAG, "clickWith--StringBuilder: " + withStringBuilder)
首先是一个with函数里面放置了一个StringBuilder对象 在大括号里面调用了StringBuilder的方法 最后 调用完成之后 返回给了withStringBuilder变量
使用集合再来写一下这个需求
//with ArrayList
val listAdd = with(ArrayList()) {
add("Start eating fruit...\n")
for (ls in list) {
add(ls + "\n")
}
add("The fruit is finished...")
toString()
}
Log.d(TAG, "clickWith--list :" + listAdd)
集合也是可以使用的
run函数
run函数的使用方法其实与with函数使用没有太大的差异
//StringBuilder
val list = mutableListOf("Apple", "Orange", "Banana")
val run = StringBuilder().run {
append("Start eating fruit...\n")
for (ls in list) {
append(ls + "\n")
}
append("The fruit is finished...")
toString()
}
Log.d(TAG, "clickRun--list :" + run)
集合
//ArrayList
val run1 = ArrayList().run {
add("Start eating fruit...\n")
for (ls in list) {
add(ls + "\n")
}
add("The fruit is finished...")
toString()
}
Log.d(TAG, "clickRun--list :" + run1)
apply函数
apply函数的使用方法其实与with函数使用没有太大的差异
集合
val list = mutableListOf("Apple", "Orange", "Banana")
val apply = ArrayList().apply {
add("Start eating fruit...\n")
for (ls in list) {
add(ls + "\n")
}
add("The fruit is finished...")
toString()
}
Log.d(TAG, "clickApply--list :" + apply)
Stringbuilder
val apply1 = StringBuilder().apply {
append("Start eating fruit...\n")
for (ls in list) {
append(ls + "\n")
}
append("The fruit is finished...")
toString()
}
Log.d(TAG, "clickApply--StringBuilder :" + apply1)
但是要充分了解其特性 合适的地方用合适的函数
例:
companion object {
fun actionStart(context: Context, data1: String, data2: String) {
val intent1 = with(Intent(context, ThreeActivity::class.java)) {
putExtra("param1", data1)
putExtra("param2", data2)
}
val intent2 = Intent(context, ThreeActivity::class.java).run {
putExtra("param1", data1)
putExtra("param2", data2)
}
val intent3 = Intent(context,ThreeActivity::class.java).apply {
putExtra("param1", data1)
putExtra("param2", data2)
}
context.startActivity(intent3)
}
}
调用方法如下
btn_click_jump_Three.setOnClickListener {
actionStart(this, "测试1", "测试2")
}
获取数据
val data1 = intent.getStringExtra("param1")
val data2 = intent.getStringExtra("param2")
Log.d("ThreeActivity---->", "onCreate: data1 == $data1"+"---data2 == $data2")
静态方法
object Util {
fun action1(){
}
}
可以使用object修饰当前类 变为单例类 可以直接调用这个方法
其次如果不用object修饰 使用companion object 关键字来编写 也可以实现
class Util {
fun action1(){
}
companion object{
fun action2(){
}
}
}
虽然以上两种并不是真正的静态方法 但是能满足大部分的开发需求
真正的静态方法有两种
注解和顶层方法
注解写法
class Util {
fun action1(){
}
companion object{
@JvmStatic
fun action2(){
}
}
}
顶层方法重写一个类文件
在kotlin中可以 直接调用此方法 doSomething()
在java中使用类名调用 HelperKt.doSomething();