移动开发(三)Activity 和Kotlin

1.Activity

1.1Activity生命周期

在这里插入图片描述

  1. onCreate()会在Activity第一次被创建的时候调用。
    你应该在这个方法中完成Activity的初始化操作
  2. onStart()这个方法再Actity由不可见的时候调用
  3. onResume() 这个方法再Activity准备好和用户进行交互时调用
    此时Activity一定位于栈顶,并处于运行状态
  4. onPause()这个方法再系统准备启动或恢复另一个Actity的时候调用。
    我们通常会再这个方法中将一些消耗cpu的资源释放掉,以及保存一些关键数据
    但这个方法执行速度一定要快,不然会影响到新的栈顶
  5. onStop()这个方法在Activity完全不可见的时候调用
    它和onPause()的区别在于,如果启动的新的Activity是一个对话框式的Activity,那么onPause()会执行,而onStop()不会执行
  6. onRestart()这个方法在Activity由停止变为运行状态之前调用,也就是Activity被重新启动了
    以上7个方法又可以分为以下3种生存期
    完整生存期 onCreate()和onRestart()
    可见生存期 onStart()和onStop()
    前台生存期 onResum()和onPause()

1.2Activity启动模式
1.standard 默认启动模式 每当启动一个新的Activity,它就会在返回栈种入栈,并处于栈顶每次启动都会
创建一个该Activity的新实例
2.singleTop 在启动Activity时如果发现返回栈的栈顶已经是该Activity,则直接使用它,不会创建Activity
的新实例
3.singleTask 每次启动该Activity时,系统都会在返回栈种检查是否存在该Activity实例,如果发现有
则直接使用 ,并把这个Activity上所有其他Activity统统出栈
4.singleInstance 会有一个单独的返回栈来管理这个Activity。不管哪个应用程序调用这个Activity,
都会共用一个返回栈
在 中添加android:launchMode来选择启动模式
示例

 <activity android:name=".MainActivity" android:launchMode="singleTask">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

1.3Activity传递数据


class SecondActivity : AppCompatActivity() {
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when(requestCode){
            1 -> if(resultCode == Activity.RESULT_OK){
                //
                val returnedData = data?.getStringExtra("extra_return")
                Toast.makeText(this,returnedData,Toast.LENGTH_SHORT).show()
            }
        }
    }

    override fun onCreate(savedInstanceState: Bundle?) {

        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        web.setOnClickListener {
            val intent=Intent(Intent.ACTION_VIEW)
            intent.data= Uri.parse("http://www.rshome.xn--ses554g/")
            startActivity(intent)
        }
        phone.setOnClickListener {
            val intent=Intent(Intent.ACTION_DIAL)
            intent.data = Uri.parse("tel:10086")
            startActivity(intent)
        }
        tranf.setOnClickListener {
            val intent = Intent(this,ThirdActivity::class.java)
            intent.putExtra("extra_data","爷问你话呢!?")
            //   startActivity(intent)

            startActivityForResult( intent,1)
        }

    }

  
    //Activity被回收前调用,用来保存数据
    override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
        super.onSaveInstanceState(outState, outPersistentState)
        val TempData = "用来保存被销毁前的数据的"
        outState.putString("data_key",TempData)
  
    }

修改onCreate()添加以下代码

...
  if(savedInstanceState!=null){
     val tempData = savedInstanceState.getString("data_key")
        //获得Activity被销毁前保存到数据
        }
...        
 
    
    /*
            Activity最佳实践
            1.知道自己在哪个Activity中
             override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        Log.d("BaseActivity",javaClass.simpleNaame)
        }
            kotlin中BaseActivity::Class.java相当于获取BaseActivity类的class对象 相当于BaseActivity.class
                    javaClass表示获取当前实例的Class对象,simpleName获取当前实例的类名
            
            2.随时随地退出程序
            新建一个单例类ActivityCollector
            object ActivityCollector{
                private val activitys = ArrayList<Activity>()
                
                fun addActivity(activity : Activity){
                activitys.add(activity)
                }
            
                fun removeActivity(activity : Activity){
                activitys.remove(activity)
                }
                fun finishAll(){
                for(activity in activities){
                    if(!activity.isFinishing){
                    activity。finish()
                    }
                }
                
                }
            }

                
            }
            
     */
   

1.4启动Activity最佳写法
解决需要传入参数标准问题
class SecondActivity : BaseActivity(){
companion object{
fun actionStart(context : Context,data1 : String,data2 : String){
val intent=Intent(context,SecondAActivity::class.java)
intent.putExtra(“param1”,data1)
intent.putExtra(“param2”,data2)
context.startActivity(intent)
}
}

Kotlin课堂 标准函数和静态方法

Kotlin课堂 标准函数和静态方法
1.1. with

   val result = with(obj){
        //这里时obj上下文
        "value"// with  函数的返回值
        }

1.2 run

    val result = obj.run{
        //这里时obj上下文
        "value"// run  函数的返回值
        }

1.3 apply

    val result = obj.apply{
        //这里时obj上下文
        
        }
        // result == obj

** 定义静态方法**
kotlin弱化了静态方法,提供了更好的解决方法,单例类
1.1注解
在单例类或companion object中加入@JvmStatic注

  class Util{
    
    companion object{
    @JvmStatic
    fun do(){
    println("do static")
    }
    }
    
    }

1.2顶层方法
创建一个Kotlin文件,在次文件定义任何方法都是顶层方法。都会编译成静态方法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章