马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
目次
1.Activity的生命周期
核心生命周期回调
1)onCreate()
2)onStart()
3)onResume()
4)onPause()
5)onStop()
6)onRestart()
7)onDestroy()
8)生命周期图示
10)留意事项
2.怎样创建一个Activity
3.清单文件配置Activity (AndroidManifest.xml)
1)第一种配置
2)第二种配置
4.怎样启动和关闭
1)启动
2)关闭
3.Intent与IntentFilter
1)Intent
1-主要用途
2-创建 Intent
3-添加额外数据
4-接收额外数据
2)IntentFilter
1-声明方式
2-组成部门
1--Action
2--Category
3--Data
3-匹配规则
1--Action
2--Category
3--Data
4.Activity之间的通报
1)数据通报
1-通过putExtra()方法通报
1--数据的通报
2--数据的接受
2-通过通过Bundle类通报数据
1--数据发送
2--数据接受
2)数据回传
1. startActivityForResult()方法 (activity烧毁时,返回数据)
2.setResult()方法
3.onActivityResult()
案例:模仿登录修改
1.代码
1--xml代码
1---activity_main.xml代码
2---activity_login_main.xml代码
3---activity_alter_info.xml代码
4.AndroidManifest.xml
2--java代码
1---MainActivity
2---LoginInfo
3---AlterInfo
2.效果
1.Activity的生命周期
核心生命周期回调
1)onCreate()
- 当 Activity 被创建时调用。
- 这是初始化组件的最佳机遇,比如设置布局、绑定命据等。
- 示例代码:
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- // 初始化其他组件...
- }
复制代码 2)onStart()
- 当 Activity 变得可见但尚未获取核心时调用。
- 在这个阶段,用户可以看到 Activity,但是还不能与之交互。
3)onResume()
- 当 Activity 开始与用户交互并获得核心时调用。
- 此时 Activity 处于活动状态,并可以响应用户的输入。
示例代码:
- @Override
- protected void onResume() {
- super.onResume();
- // 恢复暂停的操作,如开始传感器监听...
- }
复制代码 4)onPause()
- 当 Activity 部门被遮挡或完全不可见时调用。
- 系统可能会在 Activity 不再处于前台时调用此方法,比方当新的 Activity 启动或者对话框出现时。
- 在这里应该释放一些资源以提高系统性能。
- 示例代码:
- @Override
- protected void onPause() {
- super.onPause();
- // 停止占用CPU的动画或其他操作...
- }
复制代码 5)onStop()
- 当 Activity 对用户完全不可见时调用。
- 在这个阶段,Activity 已经不再表现给用户,但仍驻留在内存中。
- 示例代码:
- @Override
- protected void onStop() {
- super.onStop();
- // 更多清理工作...
- }
复制代码 6)onRestart()
- 当 Activity 从停止状态重新启动时调用。
- 它总是在 onStart() 方法之前调用。
- 示例代码:
- @Override
- protected void onRestart() {
- super.onRestart();
- // 重启时的处理逻辑...
- }
复制代码 7)onDestroy()
- 当 Activity 即将被烧毁时调用。
- 在这里进行最后的清算工作,比如取消网络请求、关闭数据库毗连等。
- 示例代码:
- @Override
- protected void onDestroy() {
- super.onDestroy();
- // 清理所有剩余资源...
- }
复制代码 8)生命周期图示
- +---------------------+
- | onCreate() |
- +---------------------+
- |
- v
- +---------------------+
- | onStart() |
- +---------------------+
- |
- v
- +---------------------+
- | onResume() |
- +---------------------+
- |
- v
- +---------------------+ +---------------------+
- | | | 用户交互... |
- | Activity活跃 |<->| |
- | | | |
- +---------------------+ +---------------------+
- |
- v
- +---------------------+
- | onPause() |
- +---------------------+
- |
- v
- +---------------------+
- | onStop() |
- +---------------------+
- |
- v
- +---------------------+
- | onDestroy() |
- +---------------------+
复制代码 10)留意事项
- onSaveInstanceState(Bundle outState) 和 onRestoreInstanceState(Bundle savedInstanceState) 是用于保存和恢复 Activity 状态的方法,它们通常在配置更改(如屏幕旋转)或低内存情况下的进程被杀死后重新创建 Activity 时使用。
- 如果你在 AndroidManifest.xml 中为 Activity 设置了 android:configChanges 属性,那么系统会在配置改变时不会自动烧毁并重建 Activity,而是会调用 onConfigurationChanged(Configuration newConfig) 方法。
- 在处置惩罚 Activity 生命周期时,要确保你的应用能够优雅地处置惩罚各种可能的情况,包罗忽然的中断和意外的退出。
2.怎样创建一个Activity
在res的目次 === > 鼠标右击 ===》 new ===> Activity ===>Empty Views Activity
手动创建一个AlterInfo
3.清单文件配置Activity (AndroidManifest.xml)
1)第一种配置
<!--配置LoginInfo-->
<activity
android:name=".LoginInfo"
android:exported="false" />
2)第二种配置
注:类名大写+
<!--配置隐式意图-->
<activity
android:name=".AlterInfo"
android:exported="true">
<intent-filter>
<action android:name="com.xiji.myapplication123.ALTER_INFO" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
清单文件全部内容
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools">
- <application
- android:allowBackup="true"
- android:dataExtractionRules="@xml/data_extraction_rules"
- android:fullBackupContent="@xml/backup_rules"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/Theme.MyApplication123"
- tools:targetApi="31">
- <!--配置LoginInfo-->
- <activity
- android:name=".LoginInfo"
- android:exported="false" />
- <!---->
- <activity
- android:name=".MainActivity"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <!--配置隐式意图-->
- <activity
- android:name=".AlterInfo"
- android:exported="true">
-
- <intent-filter>
- <action android:name="com.xiji.myapplication123.ALTER_INFO" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
复制代码 4.怎样启动和关闭
1)启动
public void startActivity (Intent intent);
//创建意图,并且指定要跳转的页面
Intent intent = new Intent(MainActivity.this,LoginInfo.class);
//启动
startActivity(intent);
2)关闭
public void finsh();
控件.设置监听变乱((){
public void 变乱{
finsh();//调用finsh()关闭就可以了
}
});
3.Intent与IntentFilter
1)Intent
Intent 是一种消息对象,它可以在差别组件之间发送,以执行特定的动作。它可以携带数据,并且可以指定要执行的操作的类型、目标组件以及一些额外的数据。
1-主要用途
- 启动 Activity:使用 startActivity(Intent) 方法。
- 启动 Service:使用 startService(Intent) 方法。
- 发送广播:使用 sendBroadcast(Intent), sendOrderedBroadcast(Intent, String), 等方法。
2-创建 Intent
- // 显式 Intent - 直接指定目标组件
- Intent explicitIntent = new Intent(context, TargetActivity.class);
- // 隐式 Intent - 通过 Action 和 Category 来匹配合适的组件
- Intent implicitIntent = new Intent();
- implicitIntent.setAction(Intent.ACTION_VIEW);
- implicitIntent.setData(Uri.parse("http://www.example.com"));
复制代码 3-添加额外数据
- Intent intent = new Intent(this, TargetActivity.class);
- intent.putExtra("key", "value");
- startActivity(intent);
复制代码 4-接收额外数据
- Intent intent = getIntent();
- String value = intent.getStringExtra("key");
复制代码 2)IntentFilter
IntentFilter 用来定义一个组件愿意接收哪种类型的 Intent。它通常在 AndroidManifest.xml 文件中与组件一起声明,或者在代码中动态创建。
1-声明方式
- 在 Manifest 文件中声明:
- <activity android:name=".TargetActivity">
- <intent-filter>
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="http" />
- </intent-filter>
- </activity>
复制代码 - 在代码中动态创建:
- IntentFilter filter = new IntentFilter();
- filter.addAction("com.example.MY_ACTION");
- registerReceiver(myBroadcastReceiver, filter);
复制代码
2-组成部门
1--Action
表示 Intent 的动作,比方 ACTION_VIEW, ACTION_SEND 等。
2--Category
提供 Intent 的附加信息,比如 CATEGORY_DEFAULT, CATEGORY_BROWSABLE 等。
3--Data
指定 Intent 操作的数据和数据类型,比方 URI 和 MIME 类型。
3-匹配规则
当系统实验找到能够响应给定 Intent 的组件时,会根据 Intent 和 IntentFilter 的以下属性进行匹配:
1--Action
Intent 的 action 必须与 IntentFilter 中的一个 action 匹配。
2--Category
Intent 中的全部 category 都必须在 IntentFilter 中出现。
3--Data
如果 Intent 包含 data,那么 data 必须与 IntentFilter 中的一个 data 规范匹配。
4.Activity之间的通报
1)数据通报
1-通过putExtra()方法通报
1--数据的通报
Intent intent = new Intent();
//页面跳转
intent.setClass(MainActivity.this,LoginInfo.calss)
//要通报的数据
intent.putExtra("键名","数据");
2--数据的接受
Intent intent = getIntent();
//通过键名获取
intent.getStringExtra("键名")
2-通过通过Bundle类通报数据
1--数据发送
Intent intent = new Intent();
//设置跳转的
intent.setClass(this,LoginInfo.class);
//创建并且封装Bundle类
Bundle bundle = new Bundle();
bundle.putString("键名","键值")
intent.putString(bundle);
startActivity(intent);
2--数据接受
//获取bundle对象
Bundle bundle = getIntent().getExtras();
//通过键名取
String 名字 = bundle.getString("键名")
2)数据回传
1. startActivityForResult()方法 (activity烧毁时,返回数据)
startActivityForResult(Intent 意图, int 结果响应码);
2.setResult()方法
setResult(int 结果响应码,Intent 意图)
3.onActivityResult()
接受回传数据
重写回传Activity页面的的onActivityResult()方法;
- @Override
- protected void onActivityResult(int <strong>requestCode</strong>, int <strong>resultCode</strong>, @Nullable Intent <strong>data</strong>) {
- super.onActivityResult(requestCode, resultCode, data);
- }
复制代码
案例:模仿登录修改
流程图:
1.代码
1--xml代码
1---activity_main.xml代码

2---activity_login_main.xml代码

3---activity_alter_info.xml代码

4.AndroidManifest.xml
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools">
- <application
- android:allowBackup="true"
- android:dataExtractionRules="@xml/data_extraction_rules"
- android:fullBackupContent="@xml/backup_rules"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/Theme.MyApplication123"
- tools:targetApi="31">
- <!--配置LoginInfo-->
- <activity
- android:name=".LoginInfo"
- android:exported="false" />
- <!---->
- <activity
- android:name=".MainActivity"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <!--配置隐式意图-->
- <activity
- android:name=".AlterInfo"
- android:exported="true">
- <!--这里面的活动名字要和action名字一样-->
- <intent-filter>
- <action android:name="com.xiji.myapplication123.ALTER_INFO" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
- </application>
- </manifest>
复制代码

2--java代码
1---MainActivity
- package com.xiji.myapplication123;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- import androidx.activity.EdgeToEdge;
- import androidx.annotation.Nullable;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.graphics.Insets;
- import androidx.core.view.ViewCompat;
- import androidx.core.view.WindowInsetsCompat;
- public class MainActivity extends AppCompatActivity {
- //获取控件
- private EditText username;
- private EditText password;
- private Button loginButton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- EdgeToEdge.enable(this);
- setContentView(R.layout.activity_main);
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
- Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
- return insets;
- });
- //控件初始化
- initView();
- //事件绑定
- initListener();
- }
- //控件初始化
- private void initView() {
- username = findViewById(R.id.editName);
- password = findViewById(R.id.editPassword);
- loginButton = findViewById(R.id.loginButton);
- }
- //事件绑定
- private void initListener() {
- loginButton.setOnClickListener(v -> {
- String user = username.getText().toString();
- String pwd = password.getText().toString();
- //显示意图
- Intent intent = new Intent(MainActivity.this, LoginInfo.class);
- //传递输入的数据
- if (user.equals("") || pwd.equals("")) {
- Toast.makeText(MainActivity.this, "账户和密码不能为空", Toast.LENGTH_SHORT);
- return;
- }
- intent.putExtra("username", user);
- intent.putExtra("password", pwd);
- startActivity(intent);
- Toast.makeText(MainActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
- });
- }
- }
复制代码

2---LoginInfo
- package com.xiji.myapplication123;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- import androidx.activity.EdgeToEdge;
- import androidx.annotation.Nullable;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.graphics.Insets;
- import androidx.core.view.ViewCompat;
- import androidx.core.view.WindowInsetsCompat;
- public class LoginInfo extends AppCompatActivity {
- //获取展示控件,并且把信息展示
- private EditText username;
- private EditText password;
- //修改按钮
- private Button alterButton;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- EdgeToEdge.enable(this);
- setContentView(R.layout.activity_login_info);
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
- Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
- return insets;
- });
- //控件初始化
- initView();
- //监听初始化
- initListener();
- //初始化数据
- initData();
- }
- //控件初始化
- private void initView(){
- username = findViewById(R.id.editNameInput);
- password = findViewById(R.id.editPasswordInput);
- alterButton = findViewById(R.id.loginAlterButton);
- }
- private void initListener(){
- alterButton.setOnClickListener(v -> {
- //Bundle传递信息
- Bundle bundle = new Bundle();
- //创建意图
- Intent intent = new Intent();
- //隐式传递
- intent.setClass(this, AlterInfo.class);
- intent.setAction("com.xiji.myapplication123.ALTER_INFO");
- //传递数据
- bundle.putString("username", username.getText().toString());
- bundle.putString("password", password.getText().toString());
- intent.putExtras(bundle);
- //启动
- //发送请求 如果要获取返回结果,必须要带请求码
- startActivityForResult(intent, 100);
- });
- }
- /***
- * 接受数据,数据传递
- */
- private void initData(){
- Intent intent = getIntent();
- if(intent != null){
- Bundle bundle = intent.getExtras();
- username.setText(bundle.getString("username"));
- password.setText(bundle.getString("password"));
- }
- Toast.makeText(this, "数据已接收", Toast.LENGTH_SHORT);
- }
- /**
- * 数据回传监听
- */
- @Override
- protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- System.out.println("接受回传"+data);
- Toast.makeText(this, "接受回传", Toast.LENGTH_SHORT);
- //根据返回码不同做出不同的效果
- //接受请求
- if (resultCode == 200 && requestCode == 100) {
- //获取Bundle数据
- Bundle bundle = data.getExtras();
- //修改成功
- username.setText(bundle.getString("username"));
- password.setText(bundle.getString("password"));
- Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT);
- return;
- }
- //修改失败
- Toast.makeText(this, "修改失败", Toast.LENGTH_SHORT);
- }
- }
复制代码

3---AlterInfo
- package com.xiji.myapplication123;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.Button;
- import android.widget.EditText;
- import android.widget.Toast;
- import androidx.activity.EdgeToEdge;
- import androidx.appcompat.app.AppCompatActivity;
- import androidx.core.graphics.Insets;
- import androidx.core.view.ViewCompat;
- import androidx.core.view.WindowInsetsCompat;
- public class AlterInfo extends AppCompatActivity {
- //控件初始化
- private EditText alter_name;
- private EditText alter_password;
- //按钮
- private Button alter_button;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- EdgeToEdge.enable(this);
- setContentView(R.layout.activity_alter_info);
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
- Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
- return insets;
- });
- //控件初始化
- initView();
- //事件绑定
- initListener();
- //获取数据
- initData();
- }
- //控件初始化
- private void initView(){
- alter_name = findViewById(R.id.editAlterNameInput);
- alter_password = findViewById(R.id.editAlterPasswordInput);
- alter_button = findViewById(R.id.loginAlterButtonInfo);
- }
- //按钮监听并且回传
- private void initListener(){
- alter_button.setOnClickListener(v -> {
- //回传数据
- Bundle bundle = new Bundle();
- bundle.putString("username", alter_name.getText().toString());
- bundle.putString("password", alter_password.getText().toString());
- //设置回传数据
- //通过意图返回
- Intent intent = new Intent(AlterInfo.this, LoginInfo.class);
- intent.putExtras(bundle);
- setResult(200, intent);
- Toast.makeText(this, "userName:: "+alter_name.getText().toString()+"\npassword::"+alter_password.getText().toString(), Toast.LENGTH_SHORT).show();
- //数据销毁
- finish();
- });
- }
- //获取数据接受
- public void initData(){
- Intent intent = getIntent();
- if(intent != null){
- Bundle bundle = intent.getExtras();
- alter_name.setText(bundle.getString("username"));
- alter_password.setText(bundle.getString("password"));
- }
- }
- }
复制代码

2.效果
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |