infinite state machine

Singletons und Scope in Roboguice

Introduction

user

Franziska Neumeister

Hat "Media Systems" studiert, entwickelt mobile Apps und will wissen, ob Androiden auch von elektrischen Schafen träumen


LATEST POSTS

Multithreading mit RxJava 18th April, 2016

Testbaren Code schreiben (Teil 1) 23rd April, 2015

Android

Singletons und Scope in Roboguice

Posted on .

Normalerweise erzeugt Roboguice für jede Injektion ein neues Objekt. Für manche Objekte möchte man das aber vielleicht verhindern und sichergehen, dass nur eine einzelne Instanz existiert. Ohne ein Dependency-Injection-Framework würde man dafür das Singleton-Muster einsetzen.

Globales Singleton

Um Roboguice mitzuteilen, dass es für einen Typ eine Singleton-Instanz verwenden soll, markiert man die Klasse mit der Annotation @Singleton. Durch wird für jede Injektion der Klasse die selbe Instanz verwendet. Diese Instanz wird über die gesamte Lebensdauer der App auch nicht vom Garbage Collector eingesammelt.

@Singleton
class MyHelperClass {
}

Context-Singleton

Vielleicht reicht es aus, eine Singleton-Instanz pro Context zu haben, so dass pro Activity oder Service nur eine Instanz existiert, deren Lebensdauer an die Existenzdauer des Contextes gebunden ist. Der Vorteil ist, dass diese Instanz nicht für immer im Speicher exisitiert und nach dem Ende der zugehörigen Activity oder des Services vom Garbage Collector wieder gelöscht wird. Es bedeutet aber auch, dass zwei Activity Instanzen auch zwei verschiedene Instanzen der Klasse besitzen. Die Annotation für dieses eingeschränkte Singleton-Objekt heißt @ContextSingleton und funktioniert genau wie die @Singleton Annotation.

@ContextSingleton
class MyHelperClass {
}
profile

Franziska Neumeister

Hat "Media Systems" studiert, entwickelt mobile Apps und will wissen, ob Androiden auch von elektrischen Schafen träumen

Navigation