在 Activity 中,只需要引入 MyLocationListener,通过 getLifecycle( ).addObserver( ) 方法,将观察者与被观察者绑定起来。
/**
-
@author yuchen
-
@date 2020/8/21 10:10 AM
*/
public class MainActivity extends AppCompatActivity {
private MyLocationListener mMyLocationListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMyLocationListener = new MyLocationListener(this,
new MyLocationListener.OnLocationChangedListener() {
@Override
public void onChanged(double latitude, double longitude) {
Toast.makeText(MainActivity.this, "", Toast.LENGTH_SHORT).show();
}
});
getLifecycle().addObserver(mMyLocationListener);
}
}
Fragment
Fragment 同 Activity 一样,也默认实现了 LifecycleOwner 接口。因此,以上案例同样适用于 Fragment。
二、使用 LifecycleService 解耦 Service 与组件
LifecycleService 基本介绍
Android 中拥有生命周期的组件除了 Activity/Fragment ,还有一个非常重要的组件就是 Service。LifecycleService 就是用来监听和解耦 Service 组件的。
public class LifecycleService extends Service implements LifecycleOwner {
private final ServiceLifecycleDispatcher mDispatcher = new ServiceLifecycleDispatcher(this);
......
@Override
@NonNull
public Lifecycle getLifecycle() {
return mDispatcher.getLifecycle();
}
}
(2)具体使用方法
第一步:添加相关依赖
implementation "androidx.lifecycle:lifecycle-service:2.2.0"
第二步:创建 MyServiceObserver 类,实现 LifecycleObserver 接口。使用 @OnLifecycleEvent 标记希望在 Server 生命周期发生变化时得到同步调用的方法。
public class MyServiceObserver implements LifecycleObserver {
private static String TAG = "MyServiceObserver";
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
private void initVideo(){
Log.d(TAG,"initVideo");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
private void pausePlay(){
Log.d(TAG,"stopPlay");
}
}
第三步:创建一个 MyService 的类,继承 LifecycleService。由于 LifecycleService 是 Service 的直接子类,所以使用起来与普通的 Service 没有差别。
public class MyService extends LifecycleService {
private MyServiceObserver myServiceObserver;
public MyService(){
myServiceObserver = new MyServiceObserver();
getLifecycle().addObserver(myServiceObserver);
}
}
## 三、使用 ProcessLifecycleOwner 监听应用程序的生命周期
LifeCylce 提供了一个名为 ProcessLifecycleOwner 的类,以方便我们知道整个应用程序的生命周期情况。而且不会给项目增加任何的耦合度。
如需使用,先添加依赖
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
ProcessLifecycleOwner 的使用方式与 Activity、Fragment、Service 是类似的,其本质也是观察者模式,由于我们要观察的是整个应用程序,因此,需要在 Application 中进行相关代码的编写。
先写自定义组件
/**
-
@author yuchen
-
@date 2020/8/20 5:57 PM
*/
public class ApplicationObserver implements LifecycleObserver {
private String TAG = this.getClass().getName();
/**
- 在应用的整个生命周期只会被调用一次
*/
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreated() {
Log.d(TAG, "Lifecycle.Event.ON_CREATE");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
Log.d(TAG, "Lifecycle.Event.ON_START");
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
Log.d(TAG, "Lifecycle.Event.ON_RESUME");
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Log.d(TAG, "Lifecycle.Event.ON_PAUSE");
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
Log.d(TAG, "Lifecycle.Event.ON_STOP");
}
/**
-
永远不会被调用,系统不会分发调用ON_DESTROY事件
*/
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
Log.d(TAG, "Lifecycle.Event.ON_DESTROY");
}
}在 Application 中使用
- 在应用的整个生命周期只会被调用一次
/**
-
@author yuchen
-
@date 2020/8/20 5:35 PM
*/
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ProcessLifecycleOwner.get()
.getLifecycle()
.addObserver(new ApplicationObserver());
}
}最后
我见过很多技术leader在面试的时候,遇到处于迷茫期的大龄程序员,比面试官年龄都大。这些人有一些共同特征:可能工作了7、8年,还是每天重复给业务部门写代码,工作内容的重复性比较高,没有什么技术含量的工作。问到这些人的职业规划时,他们也没有太多想法。
其实30岁到40岁是一个人职业发展的黄金阶段,一定要在业务范围内的扩张,技术广度和深度提升上有自己的计划,才有助于在职业发展上有持续的发展路径,而不至于停滞不前。
不断奔跑,你就知道学习的意义所在!
以上进阶BATJ大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。