Kotlin for Android Developers


 Application Singleton and


Download 1.04 Mb.
Pdf ko'rish
bet40/79
Sana18.06.2023
Hajmi1.04 Mb.
#1588404
1   ...   36   37   38   39   40   41   42   43   ...   79
Bog'liq
Kotlin for Android Developers Learn Kotlin the Easy Way While Developing an Android App ( PDFDrive )

16 Application Singleton and
Delegated Properties
We are going to implement a database soon and, if we want to keep our code simple and our app in
independent layers (instead of everything added to our activity), we’ll need to have an easier access
to the application context.
16.1 Application Singleton
The simplest way is to just create a singleton the way we’d do in Java:
1
class App : Application() {
2
3
companion object {
4
private var instance: Application? = null
5
fun instance() = instance!!
6
}
7
8
override fun onCreate() {
9
super.onCreate()
10
instance = this
11
}
12
}
Remember you need to add this
App
class to the
AndroidManifest.xml
in order to be used as the
application instance:
1
2
android:allowBackup="true"
3
android:icon="@mipmap/ic_launcher"
4
android:label="@string/app_name"
5
android:theme="@style/AppTheme"
6
android:name=".ui.App">
7
...
8

56


16 Application Singleton and Delegated Properties
57
The problem with Android is that we don’t have control over many class constructors. For instance,
we cannot initialise a non-nullable property, because its value needs to be defined in the constructor.
So we need a nullable variable and then a function that returns a non-nullable value. We know we
always have an
App
instance, and that nothing under our control can be done before application
onCreate
, so we are safe by assuming
instance()
function will always be able to return a non-
nullable
App
instance.
But this solution seems a bit unnatural. We need to define a property (which already has a getter
and a setter) and then a function to return that property. Do we have another way to get a similar
result? Yeah, we can delegate the value of a property to another class. This is commonly know as

Download 1.04 Mb.

Do'stlaringiz bilan baham:
1   ...   36   37   38   39   40   41   42   43   ...   79




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling