下面是关于“Android开发中Activity的生命周期及加载模式详解”的完整攻略:
什么是Activity生命周期?
在Android开发中,Activity是一个界面的表示,它包含了用户与之交互的所有内容。而Activity的生命周期,是指从Activity的创建到销毁,整个过程中所经历的六个阶段。这六个阶段分别为:
- onCreate()
- onStart()
- onResume()
- onPause()
- onStop()
- onDestroy()
接下来我们将对这六个阶段分别进行详细讲解。
Activity生命周期详解
onCreate()
Activity继承自Context,因此第一个被调用的是Activity的构造方法。其次你可以通过onCreate()方法来初始化你的Activity,比如可以调用setContentView()方法来指定你的Activity的布局文件。
onStart()
在onCreate()方法完成后,接着调用的是onStart()方法。在这个阶段,Activity需要准备好显示给用户的界面,但是界面并没有出现,它仍然被其他界面所覆盖着。
onResume()
当一个Activity处于Resumed状态时,用户可以看到并与之交互。在onResume()方法中,Activity会向用户展示它的UI,并开始响应用户的操作。因为这个阶段Activity已经可以接收用户的输入,所以也是处理用户交互的最佳地点。
onPause()
当一个Activity处于Paused状态时,它仍然可见,但是它已经失去了焦点。一般在这个阶段,Activity将停止处理用户输出,且它的动画停止了。次生对象的访问将暂停,为了加快后台任务的速度。在这个阶段,如果某些操作需要耗费大量时间,你需要启动一个线程来进行操作。
onStop()
当一个Activity停止时,它会隐藏,并不再对用户进行显示。它的UI不再可见,并且所有次生对象都会被回收。当用户重启这个Activity时,Activity将在onStart()方法中重新创建。
onDestroy()
当一个Activity被销毁时,它会从内存中消失,并且不再占用任何空间。在这个阶段,Activity已经过时,任何重要的信息都需要被保存起来。
Activity加载模式详解
- Standard
标准模式是Activity的默认加载模式,每次启动Activity都会创建一个新的实例。
- SingleTop
在这个模式中,如果新Activity已经位于栈顶时,不会再重新创建一个新的实例,而是直接调用onNewIntent()方法。如果不在栈顶,则会创建一个新的实例。
示例:
public class SingleTopActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_top);
textView = findViewById(R.id.tv_single_top);
textView.setText("TaskId = " + getTaskId() + "\n" + "Instance = " + toString());
Log.d("SingleTopActivity", "onCreate: TaskId:" + getTaskId()
+ ", hashCode:" + hashCode());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("SingleTopActivity", "onNewIntent: TaskId:" + getTaskId()
+ ", hashCode:" + hashCode());
}
public void onClick(View view) {
Intent intent = new Intent(this, SingleTopActivity.class);
startActivity(intent);
}
}
- SingleTask
在这个模式中,如果Activity已经存在于栈中,就不会再创建一个新的实例,而是直接调用onNewIntent()方法。如果将要启动的Activity不存在于栈中,则会创建一个新的Task,将Activity放到栈顶。
示例:
public class SingleTaskActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_task);
textView = findViewById(R.id.tv_single_task);
textView.setText("TaskId = " + getTaskId() + "\n" + "Instance = " + toString());
Log.d("SingleTaskActivity", "onCreate: TaskId:" + getTaskId()
+ ", hashCode:" + hashCode());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("SingleTaskActivity", "onNewIntent: TaskId:" + getTaskId()
+ ", hashCode:" + hashCode());
}
public void onClick(View view) {
Intent intent = new Intent(this, SingleTaskActivity.class);
startActivity(intent);
}
}
- SingleInstance
在这个模式中,每次启动一个Activity都会创建一个新的Task,在新的Task中Activity只有一个实例。
示例:
public class SingleInstanceActivity extends AppCompatActivity {
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_instance);
textView = findViewById(R.id.tv_single_instance);
textView.setText("TaskId = " + getTaskId() + "\n" + "Instance = " + toString());
Log.d("SingleInstanceActivity", "onCreate: TaskId:" + getTaskId()
+ ", hashCode:" + hashCode());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
Log.d("SingleInstanceActivity", "onNewIntent: TaskId:" + getTaskId()
+ ", hashCode:" + hashCode());
}
public void onClick(View view) {
Intent intent = new Intent(this, SingleInstanceActivity.class);
startActivity(intent);
}
}
通过上面的四个示例,我们可以更好的理解Activity的生命周期及加载模式。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android开发中Activity的生命周期及加载模式详解 - Python技术站