第三章 探索activity

使用intent

隐式INTENT用法

跳转到拨号键盘

val intent=Intent(Intent.ACTION_VIEW)
            intent.data=Uri.parse("tel:10086")
            startActivity(intent)

向下一个activity传输数据

    val data="Hello theSecondActivity"
    val intent=Intent(this,SecondActivity::class.java)
    intent.putExtra("extra_data",data)
    startActivity(intent)
val extraData=intent.getStringExtra("extra_data")
Log.d("secondActivity get ","extra_data $extraData")

返回数据传给上一个activity

  • 同样另外一个启动activity 的类 startActivityForResult(intent 请求码)
  • 在被启动activity中设置传入(可以绑定到按钮或者onbackPressed类中)的intent, 同时要设置setResult(Result_Ok, intent)
  • 在销毁后会调用上一个的onActivityResult函数,只需要重写该函数即可

Activity的生命周期

返回栈

activity 的状态: 运行 暂停 停止 销毁

activity的生命周期

  • onCreate 在创建的时候调用,用来初始化一些东西 完整生存期
  • onStart 由不可见变为可见状态的时候调用 可见生存期
  • onResume 交互的时候调用前台生存期
  • onPause 启动另外一个activity的时候调用前台生存期
  • onStop 在activity完全不可见的时候调用,(如果启动的是新的activity而且是对话框形式的话,会使用onPause)可见生存期
  • onDestory 被销毁的时候调用 完整生存期
  • onRestart 由停止状态变为运行状态的时候调用

Activity被回收了怎么办?

可能会将原有的信息销毁,这时候需要使用

override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
        super.onSaveInstanceState(outState, outPersistentState)
        outState.putString("datakey","something you just typed")
    }

在销毁前会调用,只需要将信息保存在bundle类型的outstate中,而在创建的时候会调用onCreate方法,其中也有bundle类型的参数,主要将其中的数据提取出来即可

启动activity的方式

在Androidmanifest中设置
launchMode=“模式”

  1. standard 每次启动新的activity都会在返回栈中创建新的实例
  2. singTop 每次启动前都会检查是否返回栈栈顶第一个是要启动的实例,如果是则不会新创建
  3. singTask 每次都会检查栈中是否已经存在了
  4. singleInstance 所有的程序调用同一个activity,为该activity创建一个单独的activity返回栈.
    如果B是共享的返回栈,AC在同一个返回栈中,则A → \rightarrow B → \rightarrow C 跳转中, 点击返回会发现 C → \rightarrow A → \rightarrow B

Activity时间

知晓现在是哪一个activity

重写onCreate的父类,使其被继承
打印下该实例的信息即可知道

open class BaseActivity:AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        Log.d("BaseActivity",javaClass.simpleName)
    }
}

立即退出程序

  1. 创建一个类ActivityCollector,用来管理类的集合
  2. 在baseActivity中重写onCreate ,将新创建的类加入其中;重写onDestory删除该实例
  3. 在使用的时候即可直接调用ActivityCollector将全部的类删除

也可以直接使用 ,直接杀死程序

android.os.Process.killProcess(android.os.Process.myPid())

启动activity的最佳写法

在secondActivity中写入

class SecondActivity : BaseActivity() {
    companion object{
        fun actionStart(context: Context,data1:String,data2:String){
            val intent=Intent(context,SecondActivity::class.java)
            intent.putExtra("param1",data1)
            intent.putExtra("param2",data2)
            context.startActivity(intent)
        }
    }
}

而在Firstactivity中调用

    button1.setOnClickListener{
            SecondActivity.actionStart(this,"zhang","san")
}

kotlin标准函数和静态方法

with 对象 lambda

lambad中会提供对象的环境

    val l= listOf<String>("a","b","c")
    val w=with (StringBuilder()){
        append("context")
        for(i in l){
            append(i)
        }
        toString()
    }
    println(w)

run 对象.run{lambda表达式}

同上

apply 对象.apply{lambda}(最后一行和上面俩个不一样,不会有返回值)

	val intent=Intent(context,SecondAcitivity::class.java).apply{
		putExtra("param1","data1"
...
}

定义静态方法

静态方法就是不需要创建实例即可直接调用的方法,在Java中static关键字,而在Kotlin中需要创建单例类

object util{
    fun dosomething(){
        println("do something")
    }
}

util.dosomething()

但是该方法会将其全部变为静态方法,正确的做法可以加一个companion object{},该方法会生成一个伴生类, 若是强制性转化为静态类,可以使用注释@JvmStatic

class util{
    fun dosomething(){
        println("do something")
    }
    companion object{

        @JvmStatic
        fun dosomething2(){
            println("do something2")
        }
    }
}

或者使用顶层方法,直接定义一个函数在单独的文件夹中

fun dosomething3(){
    println("do something3")
}

你可能感兴趣的:(android,java,kotlin)