「这是我参与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
- 退出当前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 生命周期调用示意图
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的启动模式