JetPack 学习之Lifecycle系列课程一
前言:
近几年Android技术更新迭代比较快速,每一年就有新的知识出现; 近些年笔者的工作重点从App切换到了Android HAL层的开发;在HAL层的开发工作中,主要是使用c语言.并在此过程中,发现自己对计算机底层的知识了解太少,大量时间用于底层知识的重新学习.对Android App新的知识投入的力度不够,没有跟上主流开发者的节奏;近几年想重新回到App的开发,准备重学Android;
问题一:在基类中实现LifecycleObserver的所有方法, 然后在具体类中重写需要关心的生命周期的方法,这种方式lifecycle怎么去知道你最终调用的类跟函数的?
上面的问题,根据下面的代码,可以解释如下这样:GenericLifecycleLocationListener 是基类, TestLifecycleLocationListener 是具体类, Lifecycle 是怎么调用到最终具体类的函数的,是通过基类调用的,还是可以直接跨过基类
public class GenericLifecycleLocationListener implements LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
void onCreateX(LifecycleOwner owner) {
System.out.println("GenericLifecycleLocationListener onCreateX");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
void onStartX(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
void onStop(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
void onResume(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
void onPause(LifecycleOwner owner) {
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
void onDestory(LifecycleOwner owner) {
}
}
public class TestLifecycleLocationListener extends GenericLifecycleLocationListener {
public TestLifecycleLocationListener(OnLocationChangedListener onLocationChangedListener) {
super(onLocationChangedListener);
}
@Override
void onCreateX(LifecycleOwner owner) {
super.onCreateX(owner);
System.out.println("TestLifecycleLocationListener onCreateX");
}
}
public class MainActivity extends ComponentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println("MainActivity---> onCreate;");
getLifecycle().addObserver(new TestLifecycleLocationListener());
}
}
在测试界面,通过使用如下方法,去关联Lifecycle的
getLifecycle().addObserver(new TestLifecycleLocationListener());
通过在java 工程中模拟 android端的调用,整个输出结果如下:
可以看出,最终的基类的onCreateX 跟派生类的OnCreateX都会被调用