Lifebus

Project Url: noties/Lifebus
Introduction: Lifecycle events bus for Android
More: Author   ReportBugs   
Tags:

Utility to trigger one-shot action on Android lifecycle events (no stream). Contains implementation based on Android Architecture Components and own implementation with an extended set of events for Activity and Fragment.

lifebus lifebus-arch


@Override
public void onStart() {
    super.onStart();

    final HoldMe holdMe = obtainSomething();

    lifebus.on(Lifecycle.Event.ON_STOP, () -> {
        holdMe.release();
    });
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    final MilkyWayBinding binding = MilkyWayBinding.bind(this, view);

    lifebus.on(FragmentEvent.VIEW_DESTROYED, binding::release);
}

The idea behind this: most lifecycle events have their counterparts. onCreate/onDestroy, onStart/onStop, onResume/onPause, etc. And having something initialized for example onStart would require releasing it onStop. No need for a stream of events. You register once, you receive an event exactly once, as there should not be 2 subsequent calls for onStart without interrupting them with at least one onStop.

Arch

implementation "io.noties:lifebus-arch:${latest}"

NB this artifact relies on android.arch.lifecycle:common-java8:1.1.1 in order to receive all lifecycle events without using annotation processor. I have tested it on a project with JavaVersion.VERSION_1_7 and it compiled and worked. But I cannot guarantee that this will be true with the future releases of architecture components.

// Pass an instance of `LifecycleOwner`
private final LifebusArch lifebus = LifebusArch.create(this);
lifebus.on(Lifecycle.Event.ON_DESTROY, () -> {});

Extended set of events

implementation "io.noties:lifebus:${latest}"

Activity via (ActivityEvent):

  • CREATE
  • START
  • RESUME
  • PAUSE
  • STOP
  • SAVE_INSTANCE_STATE (new in 1.1.0)
  • DESTROY

Fragment via (FragmentEvent):

  • ATTACH
  • CREATE
  • VIEW_CREATED
  • START
  • RESUME
  • PAUSE
  • STOP
  • SAVE_INSTANCE_STATE (new in 1.1.0)
  • VIEW_DESTROYED
  • DESTROY
  • DETACH
private final Lifebus<ActivityEvent> lifebus = 
        ActivityLifebus.create(application, activity);
private final Lifebus<FragmentEvent> lifebus = 
        FragmentLifebus.create(fragmentManager, fragment);

Please note that after ActivityLifebus receives a DESTROY event it will automatically unsubscribe any listeners (after dispatching a notification). The same for the FragmentLifebus and ViewLifebus with DETACH event.

License

  Copyright 2018, 2019 Dimitry Ivanov (legal@noties.io)

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools