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

43 阅读2分钟
 */
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
private void stopGetLocation() {
    Log.d(TAG, "stopGetLocation: ");
}

/**
 * 当地理位置变化,通过此接口通知调用者
 */
public interface OnLocationChangedListener {
    /**
     * 位置变化
     *
     * @param latitude
     * @param longitude
     */
    void onChanged(double latitude, double longitude);
}

}


在 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()); } }


> 
> 来自:https://www.yuque.com/gaodubukeni/myandroid/lifecycle
> 
> 
> 



[**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的社区(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**](https://github.com/a120464/Android-P7/blob/master/Android%E5%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)