1
\$\begingroup\$

I'm developing an app that use socket to receive messages from a chat. I'm using an MVP approach and I store the data in a Singleton class named DataBridge like this:

class myApplication: Application() {

    val dataBridge: DataBridge = DataBridge()
    val deviceManager: DeviceManager = DeviceManager(this)

    override fun onCreate() {
        super.onCreate()
        instance = this

        //init Logger
        TimberImplementation.init()

        //init Maps
        Mapbox.getInstance(this, MAP_ACCESS_TOKEN)
    }

    companion object {
        lateinit var instance: InfiniteApplication
            private set
    }
}

I have the following scenario:

  • Main Activity: create socket connection and update data in DataBridge class. It has a ViewPagerAdapter with 4 fragments. Each Fragment has it's own Presenter.
  • Chat Activity: listen changes from DataBridge like onNewMessage (fired by HomeActivity) and display the chat

The question is: is a good practice to share Live Model by Application and make it accessible from presenter of different activities?

\$\endgroup\$
  • \$\begingroup\$ Welcome to Code Review! Your code does seem to be a code stub, since there are likely relevant parts missing, so the results you get from the code review might be suboptimal. \$\endgroup\$ – AlexV May 14 at 11:17
2
\$\begingroup\$

Is a good practice to share LiveData? Yeah

Here as you are using the data in databridge as a single source of truth and it is used hold data which is needed to be shared across multiple screen with live updates, Livedata is a really good option as it will also handle the lifecycle for you.

Android docs also has sample on Extending LiveData to create your own singleton data source which you may find helpful.

Also you can leverage the feature of Object declarations in kotlin to lazy initialize your DataBridge rather than in Application class.

New contributor
Harshith Shetty is a new contributor to this site. Take care in asking for clarification, commenting, and answering. Check out our Code of Conduct.
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.