Lifebus-Arch

Lifebus

License

License

GroupId

GroupId

io.noties
ArtifactId

ArtifactId

lifebus-arch
Last Version

Last Version

1.2.1
Release Date

Release Date

Type

Type

aar
Description

Description

Lifebus-Arch
Lifebus
Project URL

Project URL

https://github.com/noties/Lifebus
Source Code Management

Source Code Management

https://github.com/noties/Lifebus

Download lifebus-arch

How to add to project

<!-- https://jarcasting.com/artifacts/io.noties/lifebus-arch/ -->
<dependency>
    <groupId>io.noties</groupId>
    <artifactId>lifebus-arch</artifactId>
    <version>1.2.1</version>
    <type>aar</type>
</dependency>
// https://jarcasting.com/artifacts/io.noties/lifebus-arch/
implementation 'io.noties:lifebus-arch:1.2.1'
// https://jarcasting.com/artifacts/io.noties/lifebus-arch/
implementation ("io.noties:lifebus-arch:1.2.1")
'io.noties:lifebus-arch:aar:1.2.1'
<dependency org="io.noties" name="lifebus-arch" rev="1.2.1">
  <artifact name="lifebus-arch" type="aar" />
</dependency>
@Grapes(
@Grab(group='io.noties', module='lifebus-arch', version='1.2.1')
)
libraryDependencies += "io.noties" % "lifebus-arch" % "1.2.1"
[io.noties/lifebus-arch "1.2.1"]

Dependencies

compile (3)

Group / Artifact Type Version
androidx.annotation » annotation jar 1.1.0
androidx.lifecycle » lifecycle-extensions jar 2.2.0
androidx.lifecycle » lifecycle-common-java8 jar 2.2.0

Project Modules

There are no modules declared in this project.

Lifebus

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 ([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.

Versions

Version
1.2.1
1.2.0