安卓-Activity

Activity

创建一个layout 页面布局

在这里插入图片描述

AndroidManifest文件中注册

在这里插入图片描述

Activity 页面跳转

每个Activity有两个标签 actioncategory
action指定活动触发动作
category 指定活动的分类 将category元素声明为 DEFAULT可使 Activity 能够接收启动请求

显式intentintent 可以理解为 -> 用户想要的操作 ,根据不同的intent来调用不同的Activity展现给用户

val button1:Button = findViewById(R.id.button1) //获取布局文件中的控件的实例
button1.setOnClickListener { //设置点击事件
Toast.makeText(this,"显式intent",Toast.LENGTH_LONG).show()
val intent=Intent(this,SecondActivity::class.java) //显式直接指定某个Activity展现
startActivity(intent)
}

//现在更倾向于使用BindingView来获取布局中的控件, 解决findViewById()的频繁使用
val binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button1.setOnClickListener { 
    //设置点击事件
}

隐式intent , 隐式和显式的区别:显式直接指定某个Activity展现,而隐式根据intent包含的actioncategory 自动寻找合适的Activity
跳转的Activitycategory一定要有DEFUALT否则不能启动

val button4:Button = findViewById(R.id.button4) //获取布局文件中的控件的实例
        button4.setOnClickListener {
            Toast.makeText(this,"隐式intent",Toast.LENGTH_LONG).show() 
            val intent=Intent("com.example.activitytest.ACTION_STRAT") 
            //根据intent包含的 action 和 category 自动寻找合适的Activity 
            intent.addCategory("android.intent.category.MY_CATEGORY")
            startActivity(intent)
        }

使用intent 打开网页的 Activity

        val button_3:Button = findViewById(R.id.button3)
        button_3.setOnClickListener {
            val intent=Intent(Intent.ACTION_VIEW)
            intent.data=Uri.parse("https://baidu.com") //统一资源标识符,解析
            startActivity(intent)
    }

Activity的生命周期

返回栈

Activity的启动与销毁是一个栈的结构

Activity状态
  1. 运行态:当一个Activity处于栈顶时就是运行态
  2. 暂停状态:当一个Activity不在栈顶,但是仍然可见的情况下就是暂停状态,比如有对话框的Activity,这种情况的Activity是完全活着的,因为用户是看得见这个Activity的。
  3. 停止状态:Activity不处于栈顶,而且完全不可见,系统会为这个Activity保存相应的状态和成员变量,但这不是完全可靠的,当其他地方需要内存的时候系统可能会回收
  4. 销毁状态:Activity从返回栈中移除,Activity回收
Activity的生存期

7个回调方法

onCreate():每一个Activity都要重写这个方法,初始化操作,加载布局、绑定事件
onStart():有不可见变为可见的时候调用
onResume():准备和用户进行交互的时候调用、这个时候一定位于栈顶、并且处于运行态
onPause():在系统准备启动或恢复另一个Activity的时候调用(暂停状态)
onStop():在完全不可见的时候调用(停止状态)
onDestroy():在被销毁前调用(销毁状态)
onRestart():在由停止态变为运行态之前调用,也就是Activity被重新启动了

完整生存期
onCreate()onDestroy()之间所经历的就是完整生存期

可见生存期
onStart()onStop()之间所经历的就是可见生存期

前台生存期
onRestart()onPause()之间所经历的就是前台生存期

Activity在停止态时被回收,产生的临时数据消失怎么办?
onSaveInstanceState()回调方法可以保证在Activity回收之前一定被调用
如使用putString方法保存字符串,putInt方法保存整数,第一个参数是键,第二个参数是值

//重写onSaveInstanceState方法
override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        val tempData = "something you typed"
        outState.putString("data_key",tempData)
    }
//onCreate时获取键为data_key的值
val tempeData = savedInstanceState.getString("data_key")

Activity的启动模式

在实际项目中要以特定的需求使用恰当的启动模式
4种启动模式
Standard:默认启动模式,系统不会在意该Activity是否在栈中存在,每次启动都会创建一个新的Activity
singleTop:当系统发现当前栈顶与正要启动的Activity是一样的,则可认为直接使用它而不创建新的Activity,,如果当前栈顶不是要启动的Activity,系统还是会重新创建一个Activity
singleTask:系统检测返回栈看是否已经存在Activity,如果有则直接使用,并且把这个Activity之上的所有Activity出栈。这样保证了在整个应用中只存在一个该Activity实例
singleInstance:最复杂的启动模式,字面上理解为单一实例。它具备所有singleTask的特点,唯一不同的是,它是存在于另一个任务栈中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩茫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值