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.
@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
.
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, () -> {});
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.
Copyright 2018, 2019 Dimitry Ivanov ([email protected])
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.