Activity基础学习

参考过一些的文章:https://mp.weixin.qq.com/s/8jj88e4YgfpWkknmlfTf6A

未完待续…

1. 基本介绍

Activity是四大组件之一,是一个包含用户界面的组件,主要负责和用户进行交互,也是一种跨进程,跨应用的组件,比如在A应用打开B应用中的某个Activity(如:添加联系人功能)


2. Activity的几种状态
2.1 启动态
这个状态很快
2.2 运行态
此时的Activity处于栈顶,对用户来说是可见的,有焦点,可交互
2.3 暂停态
此时的Activity不在栈顶,无法获得焦点,但仍然处于可见状态
内存极低的情况下系统会回收该状态的Activity
2.4 停止态
此时的Activity不在栈顶,处于完全不可见状态
系统会保留该Activity响应的状态和变量,当其他地方需要内存时,会被系统回收
2.5 销毁态
Activity在栈中被移除

3. 生命周期
3.1 onCreate()
创建Activity,进行初始化工作,比如setContentView加载界面布局资源
3.2 onStart()
启动Activity,此时Activity处于后台,还不可见,无法交互
3.3 onResume()
栈顶Activity,可见可交互,处于运行状态
3.4 onPause()
暂停状态,可见,无焦点,不可交互
应用:通常会在此方法中将一些消耗CPU的资源释放掉(如,停止动画,注销广播等),
以及保存一些关键数据,但这个过程执行一定要快,不然会影响新栈顶Activity的使用
3.5 onStop()
停止状态,此时的Activity对用户来说,处于完全不可见状态
应用:回收资源以及资源释放
3.6 onRestart()
重新启动
应用:数据恢复
3.7 onDestroy()
销毁
应用:释放内存资源
面试点:
1. 当前Activity打开第二个Activity,会执行生命周期中的哪些方法?

在这里插入图片描述

2. 弹出一个Dialog会执行生命周期中的哪些方法?
1.如果弹出一个Dialog,会执行生命周期中的哪些方法?
	答:两种情况,如果是当前Activity的Dialog的话,生命周期是没有变化的(弹出小键盘也是没有变化的)
		如果是第二个的Activity的话,则当前Activity会调用 onPause , 第二个Activity则会调用
		onCreate -> onStart() -> onResume
3. 横竖屏切换

在这里插入图片描述

4. 按Home回到桌面

在这里插入图片描述

5. 按Home又回到应用

在这里插入图片描述

6. 从第二个页面()返回第一个页面(MainActivity): Back键

在这里插入图片描述

7. 按最近任务键,然后回到Activity

在这里插入图片描述


4. Activity的启动方法
4.1 显式启动:
 startActivity(Intent(this,Text1Activity::class.java))

4.2 隐式启动:
在AndroidManifest.xml中
<activity
    android:name=".ui.activity.TestActivity"
    android:exported="false"
    android:launchMode="singleTop" >
       <intent-filter >
           <action android:name="android.intent.action.test" />
           <category android:name="android.intent.category.DEFAULT" />
       </intent-filter>
</activity>
在Activity中
 val intent = Intent()
 intent.action = "android.intent.action.test"
 startActivity(intent)

4.3 带参数返回:

    private var registerForActivityResult1 : ActivityResultLauncher<Intent> ?=null
	override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        registerForActivityResult1 = 
        registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
            // 此处进行数据接收
            if (it.resultCode == Activity.RESULT_OK) {
                // 成功数据
                val data = it.data
            }
        }
    }
5. Activity的启动模式(参考B站:扔物线)
5.1 Standard(默认模式)
每启动一次Activity都会创建一个新的Activity实例,并置于栈顶,不会复用原有的Activity
5.2 SingleTop
栈顶复用原则,只复用栈顶的Activity
5.3 SingleTask
关键:全局单例,保证所有task中只有一个实例存在,
例子:在A中打开B的Activity,B应用的Activity会在属于自己的Task里面创建
5.4 SingleInstance
在整个系统中只有一个实例,而且独占一个栈
在A中点击B的activity的时候,B应用的activity会单独创建一个Task,独占这个Task,
也就是说这个Task里面只有一个activity, 然后将这个task直接压到A这个task上面
5.5 使用场景
Standard和SingleTop:多用于APP内部
SingleInstance:多用于开放给外部APP来贡献使用,如:邮箱
SingleTask:内部交互和外部交互都用得上

6. Activity的结束
6.1 结束当前Activity
finish()
6.2 根据请求结束Activity
 finishActivity(requestCode: Int)
7. Activity状态保存与恢复
7.1 保存:onSaveInstanceState()
	// 保存数据,一般在onPause()中保存
	override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
        super.onSaveInstanceState(outState, outPersistentState)
        logD(this, "onSaveInstanceState() ")
	}
7.2 恢复:onRestoreInstanceState()
	// 数据恢复,一般在onCreate()中恢复
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        logD(this, " onRestoreInstanceState()")
    }
8. Activity的通信
8.1 Activity间常用的通信
8.1.1 Intent
Intent 是一种运行时绑定机制,可以发起请求意图,用于不同组件间的交互/通信,传递数据
8.1.2 Bundle
8.1.3 registerForActivityResult()
8.1.4 EventBus
8.2 Activity与Fragment间的通信
8.3 Activity与Service间的通信
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值