Activity详解

1.Activity的生命周期

1.1 生命周期回调方法

onCreate(): activity正在被创建。一般做一些初始化工作,例如加载布局资源、数据初始化

onRestart():activity正在被重启。一般是用户行为导致,比如用户按Home键回到桌面,再次回到activity时,

当前activity走onRestart()—>onStart()—>onResume()

onStart():activity正在启动,activity可见,未出现在前台,可以理解为activity已经显示出来了,但用户看不见,不能进行交互

onResume():activity可见并出现在前台可以进行交互

onPause():activity正在停止

onStop():activity即将停止

onDestroy():activity即将销毁,可做一些回收工作,资源释放

1.2 activity正常的一生

onCreate()->onStart()->onResume()->onPause()->onDestroy()

1.3 activity创建及切换时的生命周期

当aActivity第一次启动时的生命周期:onCreate()->onStart()-onResume()

当aActivity跳转到bActivity时的生命周期

aActivity经历了:onPause()->onStop()

当aActivity走onPause()时,bActivity会先走onCreate()->onStart()-onResume(),然后才是aActivity走onStop()

2.Activity的启动模式

standard:默认的启动模式,每次启动一个activity都会创建activity实例,不管这个activity实例是否存在

singleTop:栈顶复用模式,如果新的activity实例位于栈顶,就不会创建新的实例,如果不是位于栈顶还是会创建实例

singleTask:站内复用模式,如果新的activity实例存在于栈内,就不会创建新的实例

singleInstance:单实例模式,当前activity只能单独存在一个任务栈中,并且具有singleTask的全部性质

3.Activity的启动流程

3.1 点击桌面App图标,Launcher进程采用Binder IPC向system_server的AMS发起startActivity请求

3.2 system_server收到请求后,采用Socket IPC向Zygote进程发送创建进程的请求,Zygote进程fork出新的子进程,即APP进程

3.3 App进程启动后初始化ActivityThread,然后通过Binder IPC向system_server的AMS发起attachApplication请求

3.4 system_server收到请求后,进行一系列准备工作后,向app进程发送scheduleLaunchActivity请求

3.5 app进程收到请求后,通过handler向主线程发送LAUCH_ACTIVITY消息,主线程收到消息后通过反射机制创建Activity,并回调Activity的onCreate()方法

3.6 至此APP便正式启动,开始进入activity生命周期

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中,ActivityAndroid 应用程序的核心组件之一。它代表了用户与应用程序交互的一个屏幕,类似于 Windows 中的窗口。Activity 提供了一个用户界面,用于显示应用程序的内容,并处理用户输入。在本文中,我们将详细介绍 Java 中的 Activity。 1. Activity 的生命周期 Activity 的生命周期是指从创建到销毁的整个过程。Activity 的生命周期可以分为以下几个部分: 1.1. 创建阶段 在创建阶段,Activity 将完成以下几个步骤: 1.1.1. onCreate():当 Activity 被创建时,系统会调用 onCreate() 方法。在此方法中,开发者可以初始化 Activity 的布局、绑定事件等。 1.1.2. onStart():当 Activity 准备好与用户进行交互时,系统会调用 onStart() 方法。在此方法中,开发者可以完成一些初始化工作,例如开始动画。 1.1.3. onResume():当 Activity 成为用户焦点并可以与用户进行交互时,系统会调用 onResume() 方法。在此方法中,开发者可以开始处理用户输入事件。 1.2. 运行阶段 在运行阶段,Activity 将完成以下几个步骤: 1.2.1. onPause():当 Activity 失去焦点并不再与用户进行交互时,系统会调用 onPause() 方法。在此方法中,开发者可以停止处理用户输入事件。 1.2.2. onStop():当 Activity 不再可见时,系统会调用 onStop() 方法。在此方法中,开发者可以完成一些清理工作,例如停止动画。 1.3. 销毁阶段 在销毁阶段,Activity 将完成以下几个步骤: 1.3.1. onDestroy():当 Activity 被销毁时,系统会调用 onDestroy() 方法。在此方法中,开发者可以完成一些清理工作,例如释放资源。 2. Activity 的启动方式 在 Java 中,可以通过以下方式启动一个 Activity: 2.1. 显式启动 显式启动是指通过明确指定要启动的 Activity 的类名来启动 Activity。例如: ```java Intent intent = new Intent(this, AnotherActivity.class); startActivity(intent); ``` 2.2. 隐式启动 隐式启动是指通过指定 Action、Category、Data 等信息来启动 Activity,系统将根据这些信息匹配合适的 Activity。例如: ```java Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.example.com")); startActivity(intent); ``` 3. Activity 的传值 在 Java 中,可以通过 Intent 对象来传递数据到另一个 Activity。具体步骤如下: 3.1. 在发送 Intent 时,通过 putExtra() 方法来添加数据: ```java Intent intent = new Intent(this, AnotherActivity.class); intent.putExtra("name", "张三"); intent.putExtra("age", 18); startActivity(intent); ``` 3.2. 在接收 Intent 时,通过 getIntent() 方法获取 Intent 对象,并通过 getXXXExtra() 方法获取数据: ```java Intent intent = getIntent(); String name = intent.getStringExtra("name"); int age = intent.getIntExtra("age", 0); ``` 4. Activity 的返回值 在 Java 中,可以通过 startActivityForResult() 方法启动一个 Activity,并在该 Activity 中设置 setResult() 方法来返回数据。具体步骤如下: 4.1. 在发送 Intent 时,通过 startActivityForResult() 方法启动另一个 Activity: ```java Intent intent = new Intent(this, AnotherActivity.class); startActivityForResult(intent, REQUEST_CODE); ``` 4.2. 在接收 Intent 时,通过 onActivityResult() 方法获取返回的数据: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { String result = data.getStringExtra("result"); } } ``` 4.3. 在被返回的 Activity 中,通过 setResult() 方法设置返回的数据: ```java Intent intent = new Intent(); intent.putExtra("result", "返回数据"); setResult(RESULT_OK, intent); finish(); ``` 以上就是 Java 中 Activity详解,希望对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值