现在貌似流行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());
}
}