Android jetpack之lifecycle

现在貌似流行jetpack这些东西了,我这边写几篇博客记录下。

lifecycle的意图就是将之前和界面生命周期需要绑定操作的组件或者模块进行分离,单独自己管理,而不强依赖于界面,实际上依赖于那个界面,但是抽出到其他类进行书写,有利于Activity/Fragment/Service代码的简洁,从而降低模块间的耦合度,并降低内存泄漏发生的可能性。

步骤:
Activity/Fragment
1.导入相应的库


    implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0"

    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

2.定义相关的LifecycleObserver
比如很多时候 我需要在界面起来的时候进行定位MyLocationListener


public class MyLocationListener implements LifecycleObserver {

    private static final String TAG = "MyLocationListener";

    private OnLocationChangeListener listener;

    int i =0;

    public MyLocationListener(AppCompatActivity activity,OnLocationChangeListener listener) {
        this.listener = listener;
        startTimer();
    }

    public MyLocationListener(Fragment fragment, OnLocationChangeListener listener) {
        this.listener = listener;
        startTimer();
    }

    private void startTimer() {
        TimerTask timerTask = new TimerTask() {
            @Override
            public void run() {
                i++;
                Log.d(TAG,"startTimer new i is:"+i);
                listener.onLocationChange(String.valueOf(i));
            }
        };

        Timer timer = new Timer();
        timer.schedule(timerTask,500,500);
    }

    public interface OnLocationChangeListener{
        void onLocationChange(String info);
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    private void onLifeCycleCreate(){
        Log.d(TAG,"onLifeCycleCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private void onLifeCycleResume(){
        Log.d(TAG,"onLifeCycleResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    private void onLifeCycleStop(){
        Log.d(TAG,"onLifeCycleStop");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    private void onLifeCycleDestroy(){
        Log.d(TAG,"onLifeCycleDestroy");
    }


}

里面我们通过@OnLifecycleEvent绑定对应界面的生命周期,然后这边做了一个模拟回调,其实就是timer的一个定时发送,让界面收到回调进行展示。

3.在界面的进行绑定

        MyLocationListener myLocationListener = new MyLocationListener(this, new MyLocationListener.OnLocationChangeListener() {
            @Override
            public void onLocationChange(String info) {
                Log.d(TAG,"onLocationChange info:"+info);
            }
        });

        getLifecycle().addObserver(myLocationListener);

这样我们就把相关的定位从Activity类抽离到MyLocationListener这个类中。

Service
步骤:
1.导入相应的库


    implementation "androidx.lifecycle:lifecycle-viewmodel:2.2.0"

    implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'

2.定义Observer,其实和activity/fragment一致


public class MyServiceObserve implements LifecycleObserver {

    private static final String TAG = "MyServiceObserve";

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    void onLifeCycleCreate(){
        Log.d(TAG,"onLifeCycleCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    void onLifeCycleResume(){
        Log.d(TAG,"onLifeCycleResume");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    void onLifeCyclePause(){
        Log.d(TAG,"onLifeCyclePause");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    void onLifeCycleDestroy(){
        Log.d(TAG,"onLifeCycleDestroy");
    }
}

3.service书写继承和注册绑定

public class MyService extends LifecycleService {

    public MyService() {
        MyServiceObserve myServiceObserve = new MyServiceObserve();
        getLifecycle().addObserver(myServiceObserve);
    }
}

LifecycleService 也是继承Service的。

Application
步骤一同上 加了的就不用加了
步骤二也是一样,不过注意的是Application的Ondestroy永远不会调用

public class MyAppObserver implements LifecycleObserver {

    private static final String TAG = "MyAppObserver";

    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    void onAppLifeCycleCreate(){
        Log.d(TAG,"onAppLifeCycleCreate");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    void onAppLifeCycleStart(){
        Log.d(TAG,"onAppLifeCycleStart");
    }

    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    void onAppLifeCycleStop(){
        Log.d(TAG,"onAppLifeCycleStop");
    }

    //永远不会调用
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    void onAppLifeCycleDestroy(){
        Log.d(TAG,"onAppLifeCycleDestroy");
    }

}

步骤三
去注册监听

public class MyApp extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle().addObserver(new MyAppObserver());
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值