Activity生命周期,启动模式,临时数据恢复Bundle,一键关闭以及启动技巧,标准函数let with run apply 和静态方法的实现,注解,顶层

/**
 * onCreate 加载布局 绑定事件
 * onStart 不可见变为可见的时候调用
 * onResume 准备好和用户交互时调用
 * onPause 启动或者恢复另一个Activity时调用,通常进行资源释放,保存关键数据,但要快,否则影响栈顶Activity
 * onStop 完全不可见时调用,如果新的Activity是对话框则仅调用onPause不onStop
 * onDestroy 在Activity销毁之前调用
 * onRestart 由停止变为运行状态之前调用
 * 完整生存期 前台生存期 可见生存期
 *
 * 3.4.5 Activity被回收了怎么办
 * Activity中还有一个onSaveInstanceState()回调方法,保证Activity在被回收前一定被调用
 * onSaveInstanceState()方法携带一个Bundle类型的参数,Bundle提供了一系列方法用于保存数据
 * putString()方法用于保存字符串,putInt()保存整型其他以此类推,方法接收两个参数,分别是键和值
 *
 * intent还可以结合bundle一起用于传递数据,首先可以把需要传递的数据保存在bundle对象中,在讲bundle对象
 * 存放在intent,到了目标Activity,从intent取出bundle,在从bundle一一取出数据
 *
 * Log.d("MainActivity",this.toString())这样可以打印栈信息
 * standard标准模式  直接创建新的实例
 * singleTop 栈顶复用模式
 * singleTask 栈内复用模式 如果复用栈内活动实例 位于其上的活动实例全部出栈
 * singleInstance  我喜欢称为双栈模式,这种模式下会有一个单独的返回栈来管理这个Activity,不管是哪个应用来访问这个
 * Activity,都共用一个返回栈,解决了共享Activity实例的问题
 *
 *  任务id的打印方法Log.d("MainActiviy","Task id is $taskId")
 *
 *  第三章最佳实践任务
 *  3.6.1 知晓当前是在哪一个Activity
 *  创建中间的继承类,改变继承结构,在中间继承类中 (注意要让中间类open使其能够被继承)
 *  Log.d("BaseActivity",javaClass.simpleNmae)
 *
 *  3.6.2 随时随地退出程序
 *  新建单例类ActivityCollector作为Activity的集合
 *  内部建立ArrayList管理activity 通过相应的addActivity removeActivity finishAll
 *
 *  3.6.3 启动Activity的最佳写法
 *  companion object中定义的方法都可以使用类似于java静态方法的方式调用
 *  核心代码如下(比如被启动的为MainActivity3)
 *  companion object{
          fun actionStart(context: Context,data1:String,data2:String){
          val intent = Intent(context,MainActivity3::class.java)
          intent.putExtra("param1",data1)
           intent.putExtra("param2",data2)
          context.startActivity(intent)
      }
  }
 *
 *  3.7 kotlin课堂 标准函数和静态方法
 *  标准函数指的是Standard.kt文件中定义的函数,任何kotlin代码都可以自由的调用所有标准函数
 *  3.7.1 标准函数with  run 和apply
 *  前面有学过let,主要配合?.操作符来进行辅助判空
 *
 *  with接收两个参数,第一个是任意类型对象,第二个是lambda表达式,with会在lambda表达式中提供第一个参数对象上下文,
 *  并使用lambda表达式最后一行作为返回值返回,主要用于连续调用同一个对象多个方法时变得更加精简
 *  val result = with(obj){
 *    //这里是obj的上下文
 *    "value"  //with函数的返回值
 *  }
 *
 *  run函数与with相似,但run不能直接调用,必须调用某个对象的run函数才行
 *  val result = obj.run{
 *    //obj上下文
 *    "value"  //run函数的返回值
 *  }
 *
 *  apply和run也非常相似,都要在某个对象上调用,不同的是apply无法指定返回值,会自动返回调用对象本身
 *  val result = obj.apply{
 *     //obj的上下文
 *  }   //result == obj
 *
 *3.7.2  定义静态方法
 * 静态方法又叫类方法,指的是不用创建实例就能调用的方法
 * java中只要声明一个static关键字就可以了
 * kotlin中更多的用单例类去充当工具类 去替代 java中静态方法充当工具类
 *
 * 但是使用单例类会将整个类中所有的方法全部变成类似静态方法的调用方式,如果我们只想其中的一部分方法实现这样的功能
 * 可以用到companion object{}
 * 其实companion object关键字会在内部创建一个伴生类,而这里面方法就是伴生类的实例方法,只不过kotlin会保证只有鱼给伴生类对象
 *
 * 如果确实需要定义真正的静态方法,可以采用注解和顶层方法两种方式实现
 * 如果给单例类或者companion object中的方法加上@JvmStatic注解,kotlin会将其编译为真正的静态方法
 * 这样不管是在kotlin中还是java中都可以使用静态方法的方式来调用了
 *
 * 所有在file类中定义的方法都被编译成静态方法,可以在kotlin中任何地方直接调用它
 * 但是在java中没有顶层方法这个概念,所有方法必须被定义在类中,所以如果我们在Helper.kt中定义顶层方法doSomething()
 * kotlin编译器会自动创建一个HelperKt的java类,所以在java中需要HelperKt.doSomething()的方式调用
 * */

class Util{

    fun doAction1(){
        println("do action1")
    }

    companion object{

        @JvmStatic
        fun doAction2(){
            println("do action2")
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值