小伙伴们,在之前的系列文章我们分别介绍了Android视图组件及布局相关的内容,从本文开始我们继续盘点介绍Android开发中另一个比较重要的内容,Android四大组件,第一个 Activity。
Activity是Android应用程序的一个核心组件,用于提供用户界面和交互。每个Activity都对应着一个屏幕上的窗口,用户在不同的Activity之间进行切换来完成不同的功能。
以下是关于Activity的一些重要信息:
Activity常见属性和方法如下:
属性:
IntentFilter:定义在清单文件中的Intent过滤器,用于指定Activity可以响应的Intent类型。
Intent:Activity接收到的意图对象,包含了启动Activity的相关信息,如数据、标志位等。
Window:代表Activity的窗口,可以用来设置标题栏、背景色等窗口属性。
FragmentManager:管理Activity中的Fragment,用于添加、替换和移除Fragment。
ActionBar:操作栏,可以在Activity中显示应用程序的标题、导航按钮等。
LayoutInflater:用于动态加载布局文件。可以通过getLayoutInflater()方法获取当前Activity的LayoutInflater对象。
Resources:提供访问资源文件的方法,如字符串、图片等。可以通过getResources()方法获取当前Activity的Resources对象。
方法:
onCreate():生命周期方法,在Activity创建时调用,可以进行初始化操作。
onStart():生命周期方法,在Activity变得可见但还无法与用户交互之前调用。
onResume():生命周期方法,在Activity变得可见且可以与用户交互之前调用。
onPause():生命周期方法,在Activity失去焦点但仍可见时调用,用于保存轻量级的UI状态或停止一些不必要的资源消耗。
onStop():生命周期方法,在Activity完全不可见时调用,用于释放占用的资源。
onDestroy():生命周期方法,在Activity销毁之前调用,用于释放所有的资源和执行最终的清理操作。
onActivityResult():用于接收其他Activity返回的结果,通过Intent对象获取返回的数据。
startActivity():启动另一个Activity,参数为目标Activity的Intent对象。
finish():关闭当前Activity,返回到上一个Activity。
setResult():设置当前Activity的返回结果,通过Intent对象传递数据给上一个Activity。
getSupportFragmentManager():获取Activity中的FragmentManager对象,用于管理Fragment。
setTitle():设置Activity的标题。
findViewById():通过ID查找布局文件中的UI组件。
setContentView():设置Activity的布局文件。
以下是一个简单的Activity案例:
public class MainActivity extends AppCompatActivity {
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 在布局文件中定义了一个按钮,通过findViewById获取对应的Button对象
button = findViewById(R.id.button);
// 设置按钮的点击事件监听器
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 创建一个意图对象,用于启动另一个Activity
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}Activity的生命周期是指从Activity创建到销毁的整个过程,可以分为以下几个阶段:
onCreate():在Activity首次创建时调用,进行一些初始化操作,如设置布局、获取资源等。onStart():当Activity变得可见但还无法与用户交互时调用。此时Activity仍然位于前台,但未获得焦点。onResume():在Activity变得可见并能够与用户交互之前调用,此时Activity位于前台并获得了焦点。在这个阶段,Activity处于活动状态,可以响应用户的输入事件。onPause():当Activity失去焦点但仍然可见时调用,通常是因为有其他Activity被部分遮挡或者弹出对话框等情况。在此方法内可以执行一些轻量级的释放资源的操作,但不应该做耗时操作。onStop():当Activity完全不可见时调用,比如另一个Activity覆盖在其上面,或者按下了返回键回到了上一个Activity。在此方法内可以执行一些释放资源的操作。onDestroy():在Activity即将销毁时调用,可以进行最后的资源释放和清理工作。onRestart():当已停止的Activity再次启动时调用,此方法在Activity从后台重新回到前台时调用。在Activity生命周期中,一般情况下,一个Activity在onCreate()、onStart() 和 onResume() 方法之间转换表示进入前台运行状态,而在onPause()、onStop() 和 onDestroy() 方法之间转换表示退出前台运行状态。
需要注意的是,当系统资源不足或内存紧张时,可能会触发Activity的销毁和重建,这时会调用相应的生命周期方法。因此,开发者应该在适当的生命周期方法中保存和恢复Activity的状态,以保证数据的一致性。
另外,可以通过重写对应的生命周期方法来执行自定义操作,如注册/注销广播接收器、开始/停止定时任务等,以便在不同生命周期状态下执行相应的逻辑。
Activity可以通过多种方式进行启动,其中常见的包括:
显式启动: 通过指定目标Activity的类名启动,使用startActivity()方法或者更加灵活的Intent对象来实现。例如:
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivity(intent);隐式启动: 通过指定Action、Category和Data等属性,将启动请求发送给系统让其自行匹配合适的Activity进行启动。一般与IntentFilter结合使用。例如:
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.example.com"));
startActivity(intent);startActivityForResult()启动: 当需要获取目标Activity返回的结果时,可以使用startActivityForResult()方法启动,并在目标Activity中调用setResult()方法设置返回结果。例如:
Intent intent = new Intent(CurrentActivity.this, TargetActivity.class);
startActivityForResult(intent, requestCode);在目标Activity中设置返回结果:
Intent resultIntent = new Intent();
resultIntent.putExtra("result_data", data);
setResult(Activity.RESULT_OK, resultIntent);
finish();SingleTop模式: 当要启动的Activity已经位于任务栈栈顶时,会复用该Activity实例,调用其onNewIntent()方法传递新的启动意图。
SingleTask模式: Activity设置为SingleTask模式后,系统会为其创建一个新的任务栈,并且同一任务栈中只会存在一个该Activity实例。如果该Activity已经存在于其他任务栈中,则会切换到该任务栈并调用其onNewIntent()方法。
SingleInstance模式: Activity设置为SingleInstance模式后,系统会为其创建一个独立的任务栈,并且整个系统中只会存在一个该Activity实例。
总之,Activity是Android应用程序开发的重要组件,它处理用户界面和交互,并提供了生命周期管理、布局和视图管理、意图启动等核心功能,帮助开发者构建丰富、交互性强的应用程序。