活动是一种可以包含用户界面的组件,主要用于和用户进行交互,一个应用程序中可以包含一个或多个活动。但只有一个主活动,主活动可以跳转到其他活动。

1. 创建活动

  • 手动创建
  • 利用AS创建

2. 活动注册

  1. <activity android:name=".FirstActivity">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN"></action>
  4. <category android:name="android.intent.category.LAUNCHER"></category>
  5. </intent-filter>
  6. </activity>

3. 销毁活动

Activity类提供了一个Finish方法,调用该方法可以销毁当前活动,效果和点击Back键相同。

  1. button1.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. Toast.makeText(FirstActivity.this,"you clicked button1", Toast.LENGTH_SHORT).show();
  5. finish();
  6. }
  7. });

4. Intent

Intent是Android程序中各组件之间进行交会的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。

  • 启动活动
  • 启动服务
  • 发送广播场景

1.显式Intent

  1. //FirstActivity.java
  2. package com.example.activitydemo;
  3. // 这里省略import语句
  4. public class FirstActivity extends AppCompatActivity {
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.first_layout);
  9. Button button1 = (Button) findViewById(R.id.button);
  10. button1.setOnClickListener(new View.OnClickListener() {
  11. @Override
  12. public void onClick(View v) {
  13. Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
  14. startActivity(intent);
  15. }
  16. });
  17. }
  18. };

Intent构造函数,Intent(Context packageContext, class<?>cls)第一个参数Context要求提供一个启动活动的上下文,第二个参数class指定想要启动的目标活动,通过这个构造函数就可以构建出Intent的”意图”,通过startActivity启动这个意图。

2.隐式Intent

通过intent-filter来实现

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="com.example.activitydemo">
  4. <application
  5. android:allowBackup="true"
  6. android:icon="@mipmap/ic_launcher"
  7. android:label="@string/app_name2"
  8. android:roundIcon="@mipmap/ic_launcher_round"
  9. android:supportsRtl="true"
  10. android:theme="@style/AppTheme">
  11. <activity android:name=".SecondActivity">
  12. <intent-filter>
  13. <action android:name="test"></action>
  14. <category android:name="android.intent.category.DEFAULT"></category>
  15. <category android:name="my_category"></category>
  16. </intent-filter>
  17. </activity>
  18. <activity android:name=".FirstActivity">
  19. <intent-filter>
  20. <action android:name="android.intent.action.MAIN" />
  21. <category android:name="android.intent.category.LAUNCHER" />
  22. </intent-filter>
  23. </activity>
  24. </application>
  25. </manifest>
  1. //FirstActivity.java
  2. package com.example.activitydemo;
  3. // 这里省略import语句
  4. public class FirstActivity extends AppCompatActivity {
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. super.onCreate(savedInstanceState);
  8. setContentView(R.layout.first_layout);
  9. Button button1 = (Button) findViewById(R.id.button);
  10. button1.setOnClickListener(new View.OnClickListener() {
  11. @Override
  12. public void onClick(View v) {
  13. Intent intent = new Intent("test");
  14. // 添加category
  15. intent.addCategory("my_category");
  16. startActivity(intent);
  17. }
  18. });
  19. }
  20. };

每个intent只能有一个action,但是可以有多个category,通过addCategory可以添加category。

3.Intent传递数据

向下一个action传递数据

  1. //Intent 缓存数据
  2. Intent intent = new Intent(FirstActivity.this,SecondActivity.class)
  3. String data = "Hello Second";
  4. intent.putExtra("extra_data", data);
  5. // 获取Intent缓存的数据
  6. Intent intent = getIntent();
  7. String data = intent.getStringExtra("extra_data");

启动活动时传递数据很简单,Intent中提供了一系列putExtra方法的重载,可以把需要传递的数据缓存在Intent中。启动另一个活动后,再从Intent中取出数据。

向上一个action传递数据

  • startActivityForResult开启下一个活动
  • setResult传递数据
  • 重写onActivityResult方法

    5. 活动的生命周期

    1.栈

    Android通过栈来管理活动,开启或销毁一个活动就会触发进栈和出栈。
    image.png

    2.活动状态


    运行状态**
    当一个活动位于返回栈的栈顶时,这时活动就处于运行状态。

暂停状态
活动不处于栈顶,但可见。

停止状态
活动不位于栈顶,不可见。

销毁状态
活动从返回栈中移除后就处于销毁状态。

3. 活动的生存期

  1. onCreate():活动在第一次被创建的时候调用,应该在该方法中完成活动的初始化操作,比如加载布局,绑定事件等。
  2. onStart(): 活动由不可见变为可见的时候调用。
  3. onResume():这个方法在活动准备好和用户进行交互的时候调用,此时活动一定位于返回栈的栈顶,并且处于运行状态。
  4. onPause():系统准备去启动或者恢复另一个活动的时候调用。
  5. onStop():这个方法在活动完全不可见的时候调用。
  6. onDestory():这个方法在活动被销毁之前调用,之后活动的状态将变为销毁状态。
  7. onRestart(): 活动由停止状态变为运行状态之前调用。

111.png

6. 活动的启动模式

  • standard
  • singleTop
  • singleTask
  • singleInstance

    7. 活动的最佳实践