下面我将详细讲解“Activity跳转时生命周期跟踪的实例”的完整攻略。
一、背景知识
在 Android 应用中,Activity 生命周期一直是我们开发者们必须要掌握的关键技术点。对 Android 开发者来说,了解 Activity 生命周期就像了解控制流一样重要。在编写 Android 应用程序时,我们需要了解 Activity 被创建、启动、暂停、恢复、停止和销毁的顺序以及各种状态之间的关系,以确保应用程序的设计符合用户对应用程序的预期行为的期望。
二、实现过程
在 Android 应用程序中,当我们使用 Intent 进行 Activity 之间的跳转时,我们可以跟踪 Activity 的生命周期并输出生命周期的 Log 信息。下面是实现过程:
- 在需要跳转的 Activity 中重写生命周期方法,并在每个方法中添加 Log 输出语句。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: ");
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
@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 onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
- 编写需要跳转的 Activity 的代码,并在每个生命周期方法中添加 Log 输出语句。
public class SecondActivity extends AppCompatActivity {
private static final String TAG = "SecondActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
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 onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
- 运行应用程序,并查看 Logcat 输出。
此时,在 MainActivity 中点击跳转按钮,会跳转到 SecondActivity,并输出如下 Log 信息:
MainActivity: onCreate:
MainActivity: onStart:
MainActivity: onResume:
SecondActivity: onCreate:
SecondActivity: onStart:
SecondActivity: onResume:
MainActivity: onPause:
通过上述 Log 输出可以清晰地看到 MainActivity 的生命周期方法 onCreate、onStart、onResume 依次被调用,然后 SecondActivity 的生命周期方法 onCreate、onStart、onResume 依次被调用。而 MainActivity 的 onPause 方法也在 SecondActivity 的 onResume 方法被调用之后输出了。
- 添加一个回调方法,在跳转之后得到 SecondActivity 的返回值
除了在 Activity 的生命周期方法中跟踪 Activity 的状态外,我们还可以添加一个回调方法,以便在跳转之后得到 SecondActivity 返回的数据。
在 MainActivity 中添加一个回调方法 startActivityForResult,代码如下:
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private static final int REQUEST_CODE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate: ");
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE);
}
});
}
@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 onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
if (data != null) {
String result = data.getStringExtra("result");
Log.d(TAG, "onActivityResult: " + result);
}
}
}
添加一个有返回值的方法并且在 Intent 中调用它:
public class SecondActivity extends AppCompatActivity {
private static final String TAG = "SecondActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Log.d(TAG, "onCreate: ");
Button button = findViewById(R.id.button2);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = getIntent();
intent.putExtra("result", "这是 SecondActivity 返回的值");
setResult(RESULT_OK, intent);
finish();
}
});
}
@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 onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy: ");
}
}
运行应用程序,在 MainActivity 中点击跳转按钮后,SecondActivity 中添加一个 button,点击并返回值,返回值将在 onActivityResult 方法中打印出来:
MainActivity: onCreate:
MainActivity: onStart:
MainActivity: onResume:
SecondActivity: onCreate:
SecondActivity: onStart:
SecondActivity: onResume:
MainActivity: onPause:
SecondActivity: onPause:
MainActivity: onActivityResult: 这是 SecondActivity 返回的值
MainActivity: onResume:
SecondActivity: onStop:
SecondActivity: onDestroy:
三、总结
上述是“Activity跳转时生命周期跟踪的实例”的完整攻略,通过跟踪 Activity 的生命周期,我们可以更深入地了解 Android 应用程序在运行时的状态,提高应用程序的可读性、可维护性和稳定性。同时,也可以使用 onActivityResult 回调方法从一个 Activity 中获取返回的数据。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Activity跳转时生命周期跟踪的实例 - Python技术站