Android Activity启动流程

发布时间:2023-05-24

一、Activity概述

Android应用程序是由许多Activity组成的。一个Activity代表一个屏幕上的窗口。用户与应用程序交互时,Activity会接收用户的输入并处理屏幕输出。Activity的启动流程是Android应用程序中至关重要的一个环节。

二、Activity的生命周期

一个Activity的生命周期可以分为四个阶段:

1. 创建阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
}

在创建阶段中,首先调用了onCreate()方法。在这个方法中,我们可以初始化Activity,比如设置布局文件、获取控件等。

2. 运行阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
    @Override
    protected void onStart() {
        super.onStart();
        // Activity 准备开始
    }
    @Override
    protected void onResume() {
        super.onResume();
        // Activity 进入前台
    }
}

在运行阶段中,Activity已经准备好了。在Activity变成前台窗口之前,onStart()方法会被调用,在Activity变成前台窗口之后,onResume()方法会被调用。

3. 暂停阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
    @Override
    protected void onStart() {
        super.onStart();
        // Activity 准备开始
    }
    @Override
    protected void onResume() {
        super.onResume();
        // Activity 进入前台
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Activity 进入后台
    }
}

在暂停阶段中,onPause()方法会被调用。在这个方法中,我们可以保存一些需要持久化的数据,比如用户输入的内容。

4. 停止阶段

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
    @Override
    protected void onStart() {
        super.onStart();
        // Activity 准备开始
    }
    @Override
    protected void onResume() {
        super.onResume();
        // Activity 进入前台
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Activity 进入后台
    }
    @Override
    protected void onStop() {
        super.onStop();
        // Activity 被停止
    }
}

在停止阶段中,onStop()方法会被调用。在这个方法中,我们可以释放一些资源。

三、Activity之间的跳转

在Android应用程序中,Activity之间的跳转是非常普遍的。Activity之间的启动方式有两种:

1. 显式启动

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

上述代码中,我们使用了一个Intent对象,将要启动的Activity的类名传递给了Intent对象。然后调用startActivity()方法来启动Activity。

2. 隐式启动

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

这里我们使用了一个Intent对象,并将其设置为ACTION_VIEW类型,同时将一个Uri对象传递给了Intent对象。系统会根据Uri的Scheme、Type、Category等属性,匹配到适合的Activity来启动。

四、Activity启动流程

在一个Activity启动另一个Activity时,系统必须执行以下操作:

1. 创建要启动的Activity对象

系统会根据Intent指定的类名,使用Java反射机制创建一个Activity对象。

2. 构建要启动的Activity的环境

系统会调用ActivityThreadhandleLaunchActivity()方法,来构建要启动的Activity的环境。

final ActivityClientRecord r = new ActivityClientRecord();
r.token = appToken;
r.ident = ident;
r.intent = intent;
r.isProfiling = (flags&Profiler.FLAG_PROFILING)!=0;
...
Activity a = performLaunchActivity(r, customIntent);

3. 调用onCreate()方法

系统会调用Activity的onCreate()方法,来进行一些初始化工作。

public class MyActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
    }
}

4. 加载布局文件

系统会解析布局文件,并将解析后的视图加入到Activity的View树中。

setContentView(R.layout.activity_my);

5. 构建OptionsMenu

如果Activity需要显示OptionsMenu,系统会调用Activity的onCreateOptionsMenu()方法,来构建要显示的Menu。

public class MyActivity extends Activity {
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.activity_my_menu, menu);
        return true;
    }
}

6. 生命期回调方法

系统会依次调用Activity的各个生命期回调方法,包括onStart()onResume()onPause()onStop()onDestroy()等。

五、总结

Android应用程序中Activity是核心组件之一,它的启动流程至关重要。本文对Activity的生命周期、Activity之间的跳转以及Activity的启动流程进行了详细阐述。