Activity详解

Activity概述

​ 一个应用程序通常由多个彼此之间松耦合的Activity组成。通常,有一个Activity被指定为主Activity。当应用程序第一次启动的时候,该Activity会显示给用户。

​ 每个Activity都可以启动其他Activity用于执行不同的动作(功能)。当一个新的Activity启动的时候,先前的那个Activity就会停止,但是系统会在堆栈中保存该Activity。

​ 堆栈遵循后进先出的队列原则,因此,当用户使用完当前的Activity并按Back键时,该Activity将从堆栈中取出(并销毁,释放内存空间),然后先前的Activity恢复并获取焦点。

创建和配置Activity

​ 条件:

  1. 需要继承Activity基类或其子类

  2. 创建Activity需要实现一个或多个方法;

    其中最常见的就是**onCreate(Bundle status)**方法,该方法将会在Activity创建时被回调,并可调用setContentView(View view)方法来显示要展示的View。

//MainActivity.java
public class MainActivity extends AppCompatActivity {
    
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}
}

//AndroidManifest.xml
<activity android:name=".MainActivity" //name : 指定Activity的实现类的类名(必须)
    android:label="@string/app_name" > //标题显示文字
    <intent-filter> //配置Activity过滤条件
     <action android:name="android.intent.action.MAIN" /> //设为主Activity
	
     <category android:name="android.intent.category.LAUNCHER" /> //设置附加信息
         					//决定最先运行的launcher中那个activity,该属性会最先调用
	</intent-filter>
</activity>

​ 当用户离开Activity时,系统将会自动调用onPause()方法,但这并不意味这该Activity被销毁了。在该方法中,应该实现一些需要持久化的功能,因为用户可能不会再返回该Activity,该进程可能会被杀死。

启动和关闭Activity

​ 一个Android应用通常只有一个Activity会作为程序的入口。而应用中的其他Activity,通常都由入口Activity启动,或由入口Activity启动的Activity启动。

​ Activity启动其他Activity的方法如下:

  1. startActivity(Intent intent):启动其他Activity;
  2. startActivityForResult(Intent intent,int requestCode):程序将会得到新启动Activity的结果(通过重写onActivityResult(…)方法来获取),requestCode参数代表启动Activity的请求码。这个请求码的值由开发者根据业务自行设置,用于标识请求来源。
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setClass(MainActivity.this,OtherActivity.class);
        //通过Intent对象将数据传送到相应的Activity
        MainActivity.this.startActivity(intent);
        MainActivity.this.finish();
    }
});

​ 结束Activity:

  1. finish():结束当前Activity;

  2. finishActivity(int requestCode):结束以startActivityForResult(Intent intent,int requestCode)方法启动的Activity。

    注意:大部分情况下,不建议显式调用这些方法关闭Activity。因为Android系统会为我们管理Activity的生命周期,调用这些方法可能会影响用户的预期体验。因此,只有当你不想用户再回到当前Activity的时候才去关闭它。

Activity的生命周期

(1) onCreate():创建Activity时被调用;

(2) onStart():启动Activity时被调用;

(3) onRestart():重新启动Activity时被调用;

(4) onResume():恢复Activity时被调用;

(5) onPause():暂停Activity时被调用;

(6) onStop():停止Activity时被调用;

(7) onDestory: 销毁Activity时被调用;

Activity的三个主要状态:

  1. Resumed:已恢复状态。此时Activity位于前台,并获得焦点,该状态也称为运行时状态。
  2. Paused:暂停状态。在该状态下,其他Activity获得焦点,该Activity仍可见,即仍存在于内存中,保存着自身状态,与窗口管理器保持联系,但如果系统内存极度匮乏时,可能会被杀死。
  3. Stopped:停止状态。在该状态下,该Activity完全被其他Activity覆盖,即仍存在于内存中,保存着自身状态,与窗口管理器失去联系, 系统在需要内存时,可以随时杀死该Activity。

Activity的生命周期的三个循环:

  1. 整个生命周期:OnCrete - onDestroy

    从onCreate()开始到onDestroy()结束。Activity在onCreate()进行初始化,设置所有的“全局”状态,在onDestory()释放所有的资源。

  2. 可见生命周期:OnStart - onStop

    从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个方法之间,需要保持显示给用户的UI数据和资源等。

  3. 前台生命周期:onResume - onPause

    从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。 Activity可以经常性地在resumed和paused状态之间切换

image-20210506211700004

Activity之间交换数据

​ 利用Intent组件

Intent提供了多个重载方法来存放需要携带的数据,格式如下:

  1. putExtras(String name,XXX data):其中XXX代表数据类型,如int,long,String等。
  2. putExtras(Bundle data):向intent中放入一个简单的数据携带包,该类提供了多个方法来存入数据。(查看Bundle)
//putExtra():

//MainActivity.java
button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String str = edittext.getText().toString();
				Intent intent = new Intent();
				intent.setClass(MainActivity.this,OtherActivity.class);
				intent.putExtra("content",str);

				//通过Intent对象将数据传送到相应的Activity
				MainActivity.this.startActivity(intent);
				MainActivity.this.finish();
			}
		});

//OtherActivity.java
		Intent intent = this.getIntent();
		String res = intent.getStringExtra("content");
		textview.setText(res);

//putExtras(bundle):

//MainActivity.java
button.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				String str1 = edittext1.getText().toString();
				String str2 = edittext2.getText().toString();
				Intent intent = new Intent();
				intent.setClass(MainActivity.this,OtherActivity.class);
				Bundle bundle = new Bundle();
				bundle.putString("name",str1);
				bundle.putString("pass",str2);
				intent.putExtras(bundle);

				//通过Intent对象将数据传送到相应的Activity
				MainActivity.this.startActivity(intent);
				MainActivity.this.finish();
			}
		});
//OtherActivity.java
		Intent intent = this.getIntent();
		Bundle bundle = intent.getExtras();
		String res = bundle.getString("name");
		String res1 = bundle.getString("pass");
		textview.setText(res + res1);

//OtherActivity.java
		Intent intent = this.getIntent();
		Bundle bundle = intent.getExtras();
		String res = bundle.getString("name");
		String res1 = bundle.getString("pass");
		textview.setText(res + res1);

如果觉得本文对你有帮助的话,不妨关注作者一波,小小的关注其实对我很重要。更多高质量内容与资料请访问:个人主页:修心的小屋

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
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(); ``` 以上就是 JavaActivity详解,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值