使用切面编程(AOP)研究Activity等的生命周期

对于Android开发而言,Activity的生命周期应该都知道,但你知道Activity A 跳转Activity B,Activity B再按back键回退,两个过程各自的生命周期吗?你是怎么验证的呢,每一个方法中都写一个log打印吗?

今天看怎么用切面编程验证,关于配置等可以查看这篇文章:
切面编程AOP在Android中该怎么使用

先来写一个切入activity的生命周期的类:

@Aspect
public class LifeCycleAspect {
    @Before("execution(* android.app.Activity.on**(..))")
    public void onActivityMethodBefore(JoinPoint joinPoint) {
        //方法名
        String methodName = joinPoint.getSignature().getName();
        //方法所在的类
        String target = joinPoint.getTarget().toString();
        Log.e("snow_aop", "类名:" + target + "=====方法名:" + methodName + "\n");
    }
}

Activity类的代码:只需要把生命周期的方法重写下即可。

public class AActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_a);
        findViewById(R.id.btn_01).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(AActivity.this, BActivity.class));
            }
        });
    }
    @Override
    protected void onRestart() {
        super.onRestart();
    }

    @Override
    protected void onStart() {
        super.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
    }
    @Override
    protected void onPause() {
        super.onPause();
    }
    @Override
    protected void onStop() {
        super.onStop();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
    }
}

1、一个Activity启动然后退出生命周期,运行结果
使用切面编程(AOP)研究Activity等的生命周期_第1张图片
启动:onCreate -> onStart -> onResume
退出:onPause -> onStop -> onDestroy

2、Activity A 跳转Activity B,Activity B再按back键回退,两个过程各自的生命周期,执行结果:
使用切面编程(AOP)研究Activity等的生命周期_第2张图片
Activity A 跳转 B:A(onPause) -> B(onCreate) -> B(onStart) ->B(onResume) -> A(onStop)

B再按back键回退:B(onPause) -> A(onRestart) -> A(onStart) -> A(onResume) -> B(onStop) -> B(onDestroy)

3、旋转屏,activity生命周期
3.1、未配置旋转屏,看打印结果(操作两次旋转)
使用切面编程(AOP)研究Activity等的生命周期_第3张图片
从打印结果可以看出,旋转一次屏幕,Activity会调用销毁然后再重建。
3.2、配置旋转屏,看打印结果(操作两次旋转)
在AndroidManifest中对应activity添加属性android:configChanges="orientation|screenSize"代码
在这里插入图片描述
从打印结果可以看出,配置旋转屏后,旋转屏幕,Activity会调用onConfigurationChanged()方法,而不是调用销毁再重建。

4、在activity上显示dialog和关闭dialog,activity生命周期有变化吗?
在这里插入图片描述
看打印结果怎么没有activity的生命周期呢,难道打印有问题,其实结果就是这样的,dialog的显示或者关闭,activity生命周期没有任何变化,不会调用onPause或onResume方法的。

先就验证这些吧,其他可以自己验证

你可能感兴趣的:(android)