美文网首页
Android组件之Activity

Android组件之Activity

作者: xulj100 | 来源:发表于2019-07-21 16:59 被阅读0次

    1、什么是Activity
    Activity是一个Android的应用组件,它提供屏幕进行交互。每个Activity都会获得一个用于绘制其用户界面的窗口,窗口可以充满屏幕也可以小于屏幕并浮动在其他窗口之上。

    2、Activity的创建与启动
    创建Java类继承Activity,然后在AndroidManifest.xml里面进行注册,Activity销毁调用finish()方法。
    Activity的启动分为显式启动与隐式启动,看代码:

    override fun onClick(v: View) {
            when (v.id) {
                R.id.btn_goto_fun1 -> {
                    //显式启动
                    startActivity(Intent(this, ActivitySecond::class.java))
                }
                R.id.btn_goto_fun2 -> {
                    /**
                       隐式启动
                       <activity android:name="com.hy.android.blog.ActivitySecond"
                          android:configChanges="orientation" >
                          <intent-filter>
                           <action android:name="second_action"/>
                           <category android:name="second_category"/>
                           <category android:name="android.intent.category.DEFAULT"/>
                          </intent-filter>
                        </activity>
                     */
                    val intent=Intent()
                    intent.action = "second_action"
                    intent.addCategory("second_category")
                    startActivity(intent)
                }
                R.id.btn_goto_fun3 -> {
    
                    /**
                        requestCode 100 请求码区分是谁发送的,必须大于0
    
                         this@ActivitySecond.setResult(101,Intent().putExtra("send_first","hello"))
                         this@ActivitySecond.finish()
                         resultCode 101 第二个页面销毁时返回的响应码
                     */
                    startActivityForResult(Intent(this, ActivitySecond::class.java),100)
                }
            }
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
    
            Log.e(tag, "requestCode==$requestCode >>> resultCode==$resultCode")
            Log.e(tag,"data=="+data!!.getStringExtra("send_first"))
            //ActivityFirst: requestCode==100 >>> resultCode==101
            //ActivityFirst: data==hello
        }
    

    3、Activity的生命周期

     override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_first)
            Log.e(tag, "----onCreate---------正在创建。")
            initView()
        }
    
        override fun onStart() {
            super.onStart()
            Log.e(tag, "----onStart----------正在启动,Activity可见但不在前台,无法和用户交互。")
        }
    
        override fun onResume() {
            super.onResume()
            Log.e(tag, "----onResume---------获得焦点,Activity可见且在前台并开始活动。")
        }
    
        override fun onPause() {
            super.onPause()
            Log.e(tag, "----onPause----------正在停止,旧Activity的onPause会先执行,才会启动新的Activity。")
        }
    
        override fun onStop() {
            super.onStop()
            Log.e(tag, "----onStop----------即将停止,新Activity是透明主题时,旧Activity都不会走onStop。")
        }
    
        override fun onDestroy() {
            super.onDestroy()
            Log.e(tag, "----onDestroy---------即将销毁,回收工作、资源释放。")
        }
    
        override fun onRestart() {
            super.onRestart()
            Log.e(tag, "----onRestart---------重新启动,由不可见到可见。")
        }
        override fun onSaveInstanceState(outState: Bundle?) {
            super.onSaveInstanceState(outState)
            Log.e(tag, "----onSaveInstanceState--非用户主动去销毁,保存状态")
        }
    
        override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
            super.onRestoreInstanceState(savedInstanceState)
            Log.e(tag, "----onRestoreInstanceState--数据恢复")
        }
    
        override fun onConfigurationChanged(newConfig: Configuration?) {
            super.onConfigurationChanged(newConfig)
            Log.e(tag, "----onConfigurationChanged----"+newConfig!!.orientation)
        }
    

    Activity的切换过程:由ActivityFirst跳转到ActivitySecond,如下:

    ActivityFirst: ----onCreate---------正在创建。
    ActivityFirst: ----onStart----------正在启动,Activity可见但不在前台,无法和用户交互。
    ActivityFirst: ----onResume---------获得焦点,Activity可见且在前台并开始活动。
    ActivityFirst: ----onPause----------正在停止,旧Activity的onPause会先执行,才会启动新的Activity。
    ActivitySecond: ---onCreate---------正在创建。
    ActivitySecond: ---onStart-----------正在启动,Activity可见但不在前台,无法和用户交互。
    ActivitySecond: ---onResume---------获得焦点,Activity可见且在前台并开始活动。
    ActivityFirst: ----onStop----------即将停止,新Activity是透明主题时,旧Activity都不会走onStop。
    

    这时如果ActivitySecond销毁再次回到ActivityFirst,如下:

    ActivitySecond: ---onPause---------正在停止,旧Activity的onPause会先执行,才会启动新的Activity。
    ActivityFirst: ----onRestart---------重新启动,由不可见到可见。
    ActivityFirst: ----onStart----------正在启动,Activity可见但不在前台,无法和用户交互。
    ActivityFirst: ----onResume---------获得焦点,Activity可见且在前台并开始活动。
    ActivitySecond: ---onStop---------即将停止,新Activity是透明主题时,旧Activity都不会走onStop。
    ActivitySecond: ---onDestroy---------即将销毁,回收工作、资源释放。
    

    ActivityFirst已经启动时,关闭屏幕/按Home键:

    ActivityFirst: ----onPause----------正在停止
    ActivityFirst: ----onStop----------即将停止
    

    再次回到ActivityFirst时:

    ActivityFirst: ----onRestart---------重新启动
    ActivityFirst: ----onStart-----------正在启动
    ActivityFirst: ----onResume----------获得焦点
    

    ActivityFirst已经启动,切换横屏,再次切回竖屏时:

    ActivityFirst: ----onPause----------正在停止
    ActivityFirst: ----onSaveInstanceState
    ActivityFirst: ----onStop-----------即将停止
    ActivityFirst: ----onDestroy--------即将销毁
    ActivityFirst: ----onCreate---------正在创建
    ActivityFirst: ----onStart----------正在启动
    ActivityFirst: ----onRestoreInstanceState
    ActivityFirst: ----onResume---------获得焦点
    
    ActivityFirst: ----onPause----------正在停止
    ActivityFirst: ----onSaveInstanceState
    ActivityFirst: ----onStop-----------即将停止
    ActivityFirst: ----onDestroy--------即将销毁
    ActivityFirst: ----onCreate---------正在创建
    ActivityFirst: ----onStart----------正在启动
    ActivityFirst: ----onRestoreInstanceState
    ActivityFirst: ----onResume---------获得焦点
    

    当设置android:configChanges="orientation|screenSize"时,再次切换横、竖屏:

    ActivityFirst: ----onConfigurationChanged----2
    ActivityFirst: ----onConfigurationChanged----1
    

    3、Activity四种启动模式

    • 标准模式(默认模式): android:launchMode="standard"
      每次启动一个Activity就会创建一个新的实例。
    • 栈顶复用模式:android:launchMode="singleTop"
      果新Activity已经位于任务栈的栈顶,就不会重新创建,并回调onNewIntent()方法。
    • 栈内复用模式:android:launchMode="singleTask"
      只要该Activity在一个任务栈中存在,都不会重新创建,并回调onNewIntent()方法
    • 单实例模式: android:launchMode="singleInstance"
      具有此模式的Activity只能单独位于一个任务栈中,且此任务栈中只有唯一一个实例。

    相关文章

      网友评论

          本文标题:Android组件之Activity

          本文链接:https://www.haomeiwen.com/subject/asxzhctx.html