Android Jetpack 之 LifeCycle 组件_android 自定义view lifecycle

复制代码
在 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大厂学习资料可以免费分享给大家,需要完整版的朋友,【点这里可以看到全部内容】。

相关推荐
_codemonster2 小时前
数据库字符集编码问题
android·数据库·oracle
Pika8 小时前
深入浅出Compose HitTest 机制
android·android jetpack
资深web全栈开发8 小时前
CoI - 组合优于继承:解耦的艺术
android·java·开发语言
冬奇Lab8 小时前
WMS进阶:多窗口模式与显示管理深度解析
android·源码阅读
加农炮手Jinx9 小时前
Flutter for OpenHarmony:web_socket_channel 全平台 WebSocket 通信标准库,从原理到鸿蒙实战(3000字深度解析)
android·前端·网络·websocket·flutter·华为·harmonyos
王码码20359 小时前
Flutter for OpenHarmony:web_socket 纯 Dart 标准 WebSocket 客户端(跨平台兼容性之王) 深度解析与鸿蒙
android·前端·websocket·网络协议·flutter·华为·harmonyos
zh_xuan11 小时前
kotlin runBlocking函数
android·kotlin·协程·runblocking
三少爷的鞋12 小时前
别再 launch(IO) 了:协程线程切换的 3隐藏反模式
android
贤泽14 小时前
Android 15 Lock Task 模式深度分析(第二部分)
android