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 aViewPagerAdapter
with 4 fragments. Each Fragment has it's ownPresenter
. - Chat Activity: listen changes from
DataBridge
likeonNewMessage
(fired byHomeActivity
) 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?
-
\$\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– AlexV2019年05月14日 11:17:11 +00:00Commented May 14, 2019 at 11:17
1 Answer 1
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.
-
\$\begingroup\$ Can you give some other example of Extending LiveData or can you tell what code should be there in StockManager? Thanks \$\endgroup\$Scientist– Scientist2020年09月24日 09:39:26 +00:00Commented Sep 24, 2020 at 9:39