public class SingletonService
extends android.app.Service
Service
, instead of the normal Java singleton
model, because Android tends to assign multiple class loaders during the life
cycle of a single app, and thus static values (like singletons) set in one
Activity
might not be visible in another. By
registering singletons with a Service
, multiple Activity
s
can be more confident about getting their singletons from the same source.Modifier and Type | Class and Description |
---|---|
class |
SingletonService.Binder
An implementation of the
Binder class which simply
returns this instance of the service. |
Modifier and Type | Field and Description |
---|---|
protected static java.lang.String |
ACTION_KICKOFF |
protected static java.lang.String |
LOG_TAG
A logging tag.
|
protected SingletonService.Binder |
m_bind
A constant binder instance.
|
protected java.util.HashMap<java.lang.Class<?>,java.lang.Object> |
m_mapSingletons
The mapping of classes to singleton instances of those classes.
|
START_CONTINUATION_MASK, START_FLAG_REDELIVERY, START_FLAG_RETRY, START_NOT_STICKY, START_REDELIVER_INTENT, START_STICKY, START_STICKY_COMPATIBILITY, STOP_FOREGROUND_DETACH, STOP_FOREGROUND_REMOVE
ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ALARM_SERVICE, APP_OPS_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_IMPORTANT, BIND_NOT_FOREGROUND, BIND_WAIVE_PRIORITY, BLUETOOTH_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CARRIER_CONFIG_SERVICE, CLIPBOARD_SERVICE, COMPANION_DEVICE_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, DEVICE_POLICY_SERVICE, DISPLAY_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, FINGERPRINT_SERVICE, HARDWARE_PROPERTIES_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCATION_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_ROUTER_SERVICE, MEDIA_SESSION_SERVICE, MIDI_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_NO_LOCALIZED_COLLATORS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NETWORK_STATS_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, POWER_SERVICE, PRINT_SERVICE, RECEIVER_VISIBLE_TO_INSTANT_APPS, RESTRICTIONS_SERVICE, SEARCH_SERVICE, SENSOR_SERVICE, SHORTCUT_SERVICE, STORAGE_SERVICE, STORAGE_STATS_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TEXT_CLASSIFICATION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_INPUT_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_SERVICE, WALLPAPER_SERVICE, WIFI_AWARE_SERVICE, WIFI_P2P_SERVICE, WIFI_SERVICE, WINDOW_SERVICE
Constructor and Description |
---|
SingletonService() |
Modifier and Type | Method and Description |
---|---|
<T> T |
get(java.lang.Class<T> cls)
Returns the singleton instance of the specified class.
|
<T> T |
getOrPut(java.lang.Class<T> cls,
T oAlternative)
Gets the current singleton instance for the specified class, or stores
the supplied alternative as the singleton if none was previously set.
|
<T> boolean |
hasInstanceOf(java.lang.Class<T> cls)
Indicates whether a singleton instance has been set for the specified
class.
|
static void |
kickoff(android.content.Context ctx) |
SingletonService.Binder |
onBind(android.content.Intent sig) |
void |
onCreate() |
int |
onStartCommand(android.content.Intent sig,
int zFlags,
int nStartID) |
<T> T |
put(java.lang.Class<T> cls,
T oInstance)
Specifies the singleton instance of a given class.
|
dump, getApplication, onConfigurationChanged, onDestroy, onLowMemory, onRebind, onStart, onTaskRemoved, onTrimMemory, onUnbind, startForeground, stopForeground, stopForeground, stopSelf, stopSelf, stopSelfResult
attachBaseContext, bindService, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingPermission, checkCallingUriPermission, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, clearWallpaper, createConfigurationContext, createContextForSplit, createDeviceProtectedStorageContext, createDisplayContext, createPackageContext, databaseList, deleteDatabase, deleteFile, deleteSharedPreferences, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAssets, getBaseContext, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDataDir, getDir, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getResources, getSharedPreferences, getSystemService, getSystemServiceName, getTheme, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isDeviceProtectedStorage, isRestricted, moveDatabaseFrom, moveSharedPreferencesFrom, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerReceiver, registerReceiver, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeUriPermission, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setTheme, setWallpaper, setWallpaper, startActivities, startActivities, startActivity, startActivity, startForegroundService, startInstrumentation, startIntentSender, startIntentSender, startService, stopService, unbindService, unregisterReceiver
protected static final java.lang.String LOG_TAG
protected static final java.lang.String ACTION_KICKOFF
protected java.util.HashMap<java.lang.Class<?>,java.lang.Object> m_mapSingletons
protected final SingletonService.Binder m_bind
public static void kickoff(android.content.Context ctx)
public void onCreate()
onCreate
in class android.app.Service
public SingletonService.Binder onBind(android.content.Intent sig)
onBind
in class android.app.Service
public int onStartCommand(android.content.Intent sig, int zFlags, int nStartID)
onStartCommand
in class android.app.Service
public <T> T get(java.lang.Class<T> cls)
null
is returned. If a casting error
occurs internally, then the method returns null
but also logs a
warning.T
- the class for which a singleton should be returnedcls
- the class for which a singleton should be returnednull
if none
can be obtainedpublic <T> T put(java.lang.Class<T> cls, T oInstance)
null
is returned. If a casting
error occurs internally while trying to pass back the previous instance,
then null
is still returned, but an error is also written to the
logs.T
- the class for which a singleton should be setcls
- the class for which a singleton should be setoInstance
- the instance to be proclaimed as the singleton instancenull
if none can be obtainedpublic <T> T getOrPut(java.lang.Class<T> cls, T oAlternative)
T
- the class for which a singleton should be returnedcls
- the class for which a singleton should be returnedoAlternative
- an instance to set if no previous instance is foundpublic <T> boolean hasInstanceOf(java.lang.Class<T> cls)
T
- the class for which a singleton might be setcls
- the class for which a singleton might be settrue
if an instance has been set for the class