使用lifecycle解耦页面和组件
对于一个需要在activity生命周期的某个阶段执行响应操作的组件,可以让其实现LifecycleObserver接口,并通过注解的方式,在响应的阶段进行操作:
public class MyChronometer extends Chronometer implements LifecycleObserver {
    private long elapsedTime;
    public MyChronometer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    private void startMeter(){
        setBase(SystemClock.elapsedRealtime() - elapsedTime);
        start();
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    private void stopMeter(){
        elapsedTime = SystemClock.elapsedRealtime()-getBase();
        stop();
    }
}并在activity中注册:
public class MainActivity extends AppCompatActivity {
    ActivityMainBinding binding;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding= DataBindingUtil.setContentView(this,R.layout.activity_main);
        getLifecycle().addObserver(binding.chronometer);
    }
}使用LifecycleService解耦Service与组件
执行的操作放在一个实现了LifecycleObserver接口的观察者中:
public class MyLocationObserver implements LifecycleObserver {
    private Context context;
    private MyLocationListener listener;
    private LocationManager locationManager;
    private static String TAG="shopkeepertag";
    public MyLocationObserver(Context context) {
        this.context = context;
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    private void startGetLocation() {
        Log.d(TAG, "startGetLocation: ");
        locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
        listener = new MyLocationListener();
        if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 3000, 1, listener);
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    private void stopGetLocation(){
        Log.d(TAG, "stopGetLocation: ");
        locationManager.removeUpdates(listener);
    }
    static class MyLocationListener implements LocationListener{
        @Override
        public void onLocationChanged(@NonNull Location location) {
            Log.d(TAG, "onLocationChanged: "+location.toString());
        }
    }
}service要继承自LifecycleService,并注册一个观察者:
public class MyLocationService extends LifecycleService {
    public MyLocationService() {
        Log.d("sk", "MyLocationService: ");
        MyLocationObserver observer=new MyLocationObserver(this);
        getLifecycle().addObserver(observer);
    }
}在activity中启动或者关闭服务时,观察者类就能自动执行操作。
使用ProcessLifecycleOwner监听应用程序生命周期
在Application的不同生命周期要执行的操作用注解的方式放在一个实现了LifecycleObserver接口的观察者中:
public class ApplicationObserver implements LifecycleObserver {
    private static String TAG="shopkeepertag";
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreated(){
        Log.d(TAG, "onCreated: ");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_START)
    public void onStart(){
        Log.d(TAG, "onStart: ");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
    public void onResume(){
        Log.d(TAG, "onResume: ");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
    public void onPause(){
        Log.d(TAG, "onPause: ");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
    public void onStop(){
        Log.d(TAG, "onStop: ");
    }
    @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
    public void onDestroy(){
        Log.d(TAG, "onDestroy: ");
    }
}在application通过ProcessLifecycleOwner注册一个观察者:
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ProcessLifecycleOwner.get().getLifecycle()
                .addObserver(new ApplicationObserver());
    }
}