Android 开发的四大组件(一)-Activity

227 阅读3分钟

「这是我参与2022首次更文挑战的第25天,活动详情查看:2022首次更文挑战

Activity 定义

Activity是用户接口程序,它是Android应用程序的基本功能单元,它的主要功能是提供界面。Activity是Android的核心类,该类的全名是android.app.Activity。Activity相当于C/S程序中的窗体(From)或Web程序的页面。每一个Activity提供一个可视化的区域。在这个区域可以放置各种Android组件,例如按钮、图像、文本框等。

  在Activity类中有一个oncreate事件方法,一般在该方法中对Acticity进行初始化。通过setContentView方法可以设置在Activity上显示视图组件。

  一个带界面的Android应用程序可以由一个或者多个Activity组成。至于这些Activity如何工作,它们之间的依赖关系,则完全取决于应用程序间的业务逻辑。

Activity 的生命周期

Activity的生命周期:onCreate() -> onStart() - > onResume() -> onPause() -> onStop() -> onDestroy()

onCreate()

当Activity第一次被创建的时候调用此方法.一般在此方法中进行控件的声明,添加事件等初始化工作.

onRestart()

表示Activity正在重新启动 ,一般情况下,当前Activity从不可见重新变成可见状态时,onRestart()就会被调用,这种情形一般是用户行为所导致的,比如用户按HOME键切换到桌面然后重新打开APP或者按back键。

onStart():

当Activity被显示到屏幕上的时候调用此方法.

onResume():

当此Activity能够被操作之前,也就是能够获得用户的焦点之前调用此方法.

onRestart():

当Activity被停止后又被再次启动之前调用此方法.接着将调用onStart()方法.

onPause():

当第一个Activity通过Intent启动第二个Activity的时候,将调用第一个Activity的onPause()方法.然后调用第二个Activity的onCreate(),onStart(),onResume()方法,接着调用第一个Activity的onStop()方法.如果Activity重新获得焦点,则将调用onResume()方法;如果此Activity进入用户不可见状态,那么将调用onStop()方法.

onStop():

当第一个Activity被第二个Activity完全覆盖,或者被销毁的时候回调用此方法.如果此Activity还会与用户进行交互,将调用onRestart方法();如果此Activity将被销毁,那么将调用onDestroy()方法.

onDestroy():

Activity被销毁之前调用此方法.或者是调用finish()方法结束Activity的时候调用此方法.可以在此方法中进行收尾工作,比如释放资源等.

Activity 生命周期在开发过程中的调用时机

1)进入用户可视状态:onCreate->onStart->onResume

2)被其他Activity覆盖或者锁屏状态下:onPause,恢复:onResume

3)跳转到其他Activity或者按下Home键,onPause->onStop,恢复后:onRestart->onStart->onResume

  1. 退出当前Activity,onPause->onStop->onDestory

5)从Activity是否可见来说,onstart()和onStop()是配对的,从activity是否在前台来说,onResume()和onPause()是配对的。

Activity 生命周期代码

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate: ");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart: ");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume: ");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause: ");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop: ");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart: ");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy: ");
    }

Activity 生命周期调用示意图

image.png

Activity 使用

Intent intent = new Intent(MainActivity.this, NormalActivity.class);                startActivity(intent);

通过Intent跳转,如果需要携参跳转:

 Intent intent = new Intent(MainActivity.this,NormalActivity.class);
 //第一种方法是传输基本类型数据
 intent.putExtra("name","Hello World");
 //第二种方法是传输一个bundle,bundle类似一个map,可以防止key-value类型数据
 Bundle bundle = new Bundle();
 bundle.putString("name","Hello World");
 intent.putExtra("bundle",bundle);
 //第三种方法传输一个序列化,这里User是implements Serializable之后才能传递
 intent.putExtra("name",new User());
 startActivity(intent);

接收数据:

public class NormalActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);
        if(getIntent()!=null) {
            //第一种接收方法
            String name=  getIntent().getStringExtra("name");
            //第二种接收方法
            String name1 = getIntent().getBundleExtra("bundle").getString("name");
        }
    }
}

Activity的启动模式

这个内容前面已经介绍过了,参考文章:Android 开发之Activity的启动模式