android学习之旅(11)--Activity
Activity
Activity是Android的四大组件之一,在Android应用的开发中占有举足轻重的作用。简单来说我们在屏幕上看到界面就是一个Activity,它表示一个单一屏幕的用户界面。
创建Activity
(1)新建类继承Activity或其子类
(2)在AndroidManifest中声明(注册)
(3)创建layout并在新建类的onCreate方法中设置
- 如果是使用继承开发环境那么在创建新的Activity时,编译器会自动完成上述步骤
Activity的生命周期
在Android中Activity的运行使用了回调机制,Activity在不同的生命周期中切换时,就会触发对应的回调函数。开发者就可以通过重写方法进行相关业务的处理。
Activity大致会经过4种状态:
(1)运行转态:当前Acticity位于前台,用户可见,可以获得焦点。
(2)暂停状态:其他Actictiy位于前台,该Actictiy依然可见,只是不能获得焦点。
(3)停止状态:该Acticity失去焦点。
(4)销毁状态:该Acticity结束,或者Acticity所在的进程被结束。
方法 | 调用时机 |
---|---|
onCreate() | 创建Acticity时被回调,该方法只会被调用一次 |
onStart() | 启动Acticty时被回调 |
onRestart() | 重新启动Acticity时被回调 |
onResume() | 恢复Acticty时被回调。在onStart()方法之后一定会回调onRestart()方法 |
onPause() | 暂停Acticity时被回调 |
onStop() | 停止Acticity时被回调 |
onDestroy() | 销毁Acticity时被回调。该方法只会被调用一次。 |
通过代码观看Acticity的生命周期
package com.kong.viewtext;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class LifeCycleActivity extends AppCompatActivity {
private Button m_ChangeActicity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_life_cycle);
m_ChangeActicity=findViewById(R.id.changeActicity);
m_ChangeActicity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(LifeCycleActivity.this,MainActivity.class);
startActivity(intent);
Log.v("ActivityLifeCycle","切换Acticty");
}
});
Log.v("ActivityLifeCycle","--onCreate--");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.v("ActivityLifeCycle","--onDestroy--");
}
@Override
protected void onRestart() {
super.onRestart();
Log.v("ActivityLifeCycle","--onRestart--");
}
@Override
protected void onResume() {
super.onResume();
Log.v("ActivityLifeCycle","--onResume--");
}
@Override
protected void onStart() {
super.onStart();
Log.v("ActivityLifeCycle","--onStart--");
}
@Override
protected void onPause() {
super.onPause();
Log.v("ActivityLifeCycle","--onPause--");
}
@Override
protected void onStop() {
super.onStop();
Log.v("ActivityLifeCycle","--onStop--");
}
}
Acticity的4种加载模式
android的四大组件在使用时都需要在清单文件中注册,配置Acticity是可以指定android:launchMode属性,该属性用于配置该Acticity的加载模式。该属性支持如下4个属性值。
standard: 标准模式,默认加载模式
singleTop: Task栈顶单例模式
singleTask: Task栈内单例模式
singleInstance: 全局单例模式
在Android中采用Task来管理多个Acticity,当我们启动一个任务栈时Android就会创建一个任务栈(该栈的名称默认为包名),用来管理Acticity,按启动的顺序依次进栈。而加载模式(负责管理实例化)就决定了Actictiy按何种方式加载在前台。
-
standard模式:
在该模式下,Acticity每次都会被实例化,并且将该Acticity添加到当前的任务栈中,这种模式不会启动新的任务栈,新的Acticity将被添加到原来的任务栈中。 -
singleTop模式:
在该模式下,当要启动的Acticity位于任务栈的栈顶时,系统不会重新创建目标Acticity的示例,而是直接复用已有的Acticity的实例。如果将要启动的Acticity没有位于任务栈的栈顶,该模式和标准模式相同。 -
singleTask模式:
在该模式下,当要启动的Acticity在任务栈中已经存在(无论是不是在栈顶)系统就会直接复用栈中已存在的实例。需要注意的是:如果将要启动的Acticity不在任务栈的栈顶时,系统会将栈中位于当前Acticity之上的所有Acticity全部移除,从而使得当前Acticity位于栈顶。 -
singleInstance模式:
在该模式下,系统保证无论从那个任务栈中启动目标Acticty,只会创建一个目标Acticity实例,并会使用一个全新的任务栈来加载该Acticity实例。
当系统采用singleInstance模式启动目标Acticity时,可以分为以下两种情况:
(1)如果将要启动的目标Acticity不存在,系统会先创建一个全新的任务栈,在创建目标Acticty的实例,并将它加入新的任务栈栈顶。
(2)如果将要启动的目标Acticity已经存在,无论它位于那个应用程序中,位于那个任务栈中,系统都会将该Acticity转到前台,从而使该Acticity显示出来。
下一篇: ,关于ISG