Embed
Email

Service

Document Sample

Categories
Tags
Stats
views:
9
posted:
11/15/2011
language:
English
pages:
39
public abstract class

Service

extends ContextWrapper

implements ComponentCallbacks

java.lang.Object

↳android.content.Context

↳android.content.ContextWrapper

↳ android.app.Service

Known Direct Subclasses

AbstractInputMethodService, AccessibilityService, IntentService, RecognitionService, WallpaperService

AbstractInputMethodService AbstractInputMethodService provides a abstract base class for input

methods.





AccessibilityService An accessibility service runs in the background and receives callbacks

by the system when AccessibilityEvents are fired.





IntentService IntentService is a base class for Services that handle

asynchronous requests (expressed as Intents) on demand.





RecognitionService This class provides a base class for recognition service

implementations.





WallpaperService A wallpaper service is responsible for showing a live wallpaper behind

applications that would like to sit on top of it.



Known Indirect Subclasses

InputMethodService

InputMethodService InputMethodService provides a standard implementation of an InputMethod,

which final implementations can derive from and customize.









Class Overview

A Service is an application component representing either an application's desire to perform a longer-running

operation while not interacting with the user or to supply functionality for other applications to use. Each service

class must have a corresponding declaration in its package's AndroidManifest.xml.

Services can be started with Context.startService() and Context.bindService().



Note that services, like other application objects, run in the main thread of their hosting process. This means that, if

your service is going to do any CPU intensive (such as MP3 playback) or blocking (such as networking) operations,

it should spawn its own thread in which to do that work. More information on this can be found in Application

Fundamentals: Processes and Threads. The IntentService class is available as a standard implementation

of Service that has its own thread where it schedules its work to be done.



The Service class is an important part of an application's overall lifecycle.



Topics covered here:



1. What is a Service?

2. Service Lifecycle

3. Permissions

4. Process Lifecycle

5. Local Service Sample

6. Remote Messenger Service Sample



What is a Service?

Most confusion about the Service class actually revolves around what it is not:



 A Service is not a separate process. The Service object itself does not imply it is running in its own process;

unless otherwise specified, it runs in the same process as the application it is part of.

 A Service is not a thread. It is not a means itself to do work off of the main thread (to avoid Application Not

Responding errors).



Thus a Service itself is actually very simple, providing two main features:



 A facility for the application to tell the system about something it wants to be doing in the background (even

when the user is not directly interacting with the application). This corresponds to calls to

Context.startService(), which ask the system to schedule work for the service, to be run until the

service or someone else explicitly stop it.

 A facility for an application to expose some of its functionality to other applications. This corresponds to calls

to Context.bindService(), which allows a long-standing connection to be made to the service in order to

interact with it.



When a Service component is actually created, for either of these reasons, all that the system actually does is

instantiate the component and call its onCreate() and any other appropriate callbacks on the main thread. It is

up to the Service to implement these with the appropriate behavior, such as creating a secondary thread in which it

does its work.



Note that because Service itself is so simple, you can make your interaction with it as simple or complicated as you

want: from treating it as a local Java object that you make direct method calls on (as illustrated by Local Service

Sample), to providing a full remoteable interface using AIDL.



Service Lifecycle

There are two reasons that a service can be run by the system. If someone calls Context.startService()

then the system will retrieve the service (creating it and calling its onCreate() method if needed) and then call

its onStartCommand(Intent, int, int) method with the arguments supplied by the client. The service

will at this point continue running until Context.stopService() or stopSelf() is called. Note that

multiple calls to Context.startService() do not nest (though they do result in multiple corresponding calls to

onStartCommand()), so no matter how many times it is started a service will be stopped once Context.stopService()

or stopSelf() is called; however, services can use their stopSelf(int) method to ensure the service is not

stopped until started intents have been processed.



For started services, there are two additional major modes of operation they can decide to run in, depending on the

value they return from onStartCommand(): START_STICKY is used for services that are explicitly started and

stopped as needed, while START_NOT_STICKY or START_REDELIVER_INTENT are used for services

that should only remain running while processing any commands sent to them. See the linked documentation for

more detail on the semantics.

Clients can also use Context.bindService() to obtain a persistent connection to a service. This likewise

creates the service if it is not already running (calling onCreate() while doing so), but does not call

onStartCommand(). The client will receive the IBinder object that the service returns from its

onBind(Intent) method, allowing the client to then make calls back to the service. The service will remain

running as long as the connection is established (whether or not the client retains a reference on the service's

IBinder). Usually the IBinder returned is for a complex interface that has been written in aidl.



A service can be both started and have connections bound to it. In such a case, the system will keep the service

running as long as either it is started or there are one or more connections to it with the

Context.BIND_AUTO_CREATE flag. Once neither of these situations hold, the service's onDestroy()

method is called and the service is effectively terminated. All cleanup (stopping threads, unregistering receivers)

should be complete upon returning from onDestroy().



Permissions

tag. By doing so,

Global access to a service can be enforced when it is declared in its manifest's

other applications will need to declare a corresponding element in their own manifest to

be able to start, stop, or bind to the service.



In addition, a service can protect individual IPC calls into it with permissions, by calling the

checkCallingPermission(String) method before executing the implementation of that call.



See the Security and Permissions document for more information on permissions and security in general.



Process Lifecycle

The Android system will attempt to keep the process hosting a service around as long as the service has been

started or has clients bound to it. When running low on memory and needing to kill existing processes, the priority of

a process hosting the service will be the higher of the following possibilities:



 If the service is currently executing code in its onCreate(), onStartCommand(), or

onDestroy() methods, then the hosting process will be a foreground process to ensure this code can execute

without being killed.



 If the service has been started, then its hosting process is considered to be less important than any

processes that are currently visible to the user on-screen, but more important than any process not visible. Because

only a few processes are generally visible to the user, this means that the service should not be killed except in

extreme low memory conditions.



 If there are clients bound to the service, then the service's hosting process is never less important than the

most important client. That is, if one of its clients is visible to the user, then the service itself is considered to be

visible.



 A started service can use the startForeground(int, Notification) API to put the service

in a foreground state, where the system considers it to be something the user is actively aware of and thus not a

candidate for killing when low on memory. (It is still theoretically possible for the service to be killed under extreme

memory pressure from the current foreground application, but in practice this should not be a concern.)

Note this means that most of the time your service is running, it may be killed by the system if it is under heavy

memory pressure. If this happens, the system will later try to restart the service. An important consequence of this is

that if you implement onStartCommand() to schedule work to be done asynchronously or in another thread,

then you may want to use START_FLAG_REDELIVERY to have the system re-deliver an Intent for you so that it

does not get lost if your service is killed while processing it.

Other application components running in the same process as the service (such as an Activity) can, of course,

increase the importance of the overall process beyond just the importance of the service itself.



Local Service Sample

One of the most common uses of a Service is as a secondary component running alongside other parts of an

application, in the same process as the rest of the components. All components of an .apk run in the same process

unless explicitly stated otherwise, so this is a typical situation.



When used in this way, by assuming the components are in the same process, you can greatly simplify the

interaction between them: clients of the service can simply cast the IBinder they receive from it to a concrete class

published by the service.



An example of this use of a Service is shown here. First is the Service itself, publishing a custom class when bound:





public class LocalService extends Service {

private NotificationManager mNM;



/**

* Class for clients to access. Because we know this service always

* runs in the same process as its clients, we don't need to deal with

* IPC.

*/

public class LocalBinder extends Binder {

LocalService getService() {

return LocalService.this;

}

}



@Override

public void onCreate() {

mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);



// Display a notification about us starting. We put an icon in the status bar.

showNotification();

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

Log.i("LocalService", "Received start id " + startId + ": " + intent);

// We want this service to continue running until it is explicitly

// stopped, so return sticky.

return START_STICKY;

}



@Override

public void onDestroy() {

// Cancel the persistent notification.

mNM.cancel(R.string.local_service_started);



// Tell the user we stopped.

Toast.makeText(this, R.string.local_service_stopped,

Toast.LENGTH_SHORT).show();

}



@Override

public IBinder onBind(Intent intent) {

return mBinder;

}



// This is the object that receives interactions from clients. See

// RemoteService for a more complete example.

private final IBinder mBinder = new LocalBinder();



/**

* Show a notification while this service is running.

*/

private void showNotification() {

// In this sample, we'll use the same text for the ticker and the expanded

notification

CharSequence text = getText(R.string.local_service_started);



// Set the icon, scrolling text and timestamp

Notification notification = new Notification(R.drawable.stat_sample, text,

System.currentTimeMillis());



// The PendingIntent to launch our activity if the user selects this notification

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,

new Intent(this, LocalServiceActivities.Controller.class), 0);



// Set the info for the views that show in the notification panel.

notification.setLatestEventInfo(this, getText(R.string.local_service_label),

text, contentIntent);



// Send the notification.

// We use a layout id because it is a unique number. We use it later to cancel.

mNM.notify(R.string.local_service_started, notification);

}

}





With that done, one can now write client code that directly accesses the running service, such as:





private LocalService mBoundService;



private ServiceConnection mConnection = new ServiceConnection() {

public void onServiceConnected(ComponentName className, IBinder service) {

// This is called when the connection with the service has been

// established, giving us the service object we can use to

// interact with the service. Because we have bound to a explicit

// service that we know is running in our own process, we can

// cast its IBinder to a concrete class and directly access it.

mBoundService = ((LocalService.LocalBinder)service).getService();



// Tell the user about this for our demo.

Toast.makeText(Binding.this, R.string.local_service_connected,

Toast.LENGTH_SHORT).show();

}



public void onServiceDisconnected(ComponentName className) {

// This is called when the connection with the service has been

// unexpectedly disconnected -- that is, its process crashed.

// Because it is running in our same process, we should never

// see this happen.

mBoundService = null;

Toast.makeText(Binding.this, R.string.local_service_disconnected,

Toast.LENGTH_SHORT).show();

}

};



void doBindService() {

// Establish a connection with the service. We use an explicit

// class name because we want a specific service implementation that

// we know will be running in our own process (and thus won't be

// supporting component replacement by other applications).

bindService(new Intent(Binding.this,

LocalService.class), mConnection, Context.BIND_AUTO_CREATE);

mIsBound = true;

}



void doUnbindService() {

if (mIsBound) {

// Detach our existing connection.

unbindService(mConnection);

mIsBound = false;

}

}



@Override

protected void onDestroy() {

super.onDestroy();

doUnbindService();

}





Remote Messenger Service Sample

If you need to be able to write a Service that can perform complicated communication with clients in remote

processes (beyond simply the use of Context.startService to send commands to it), then you can use

the Messenger class instead of writing full AIDL files.



An example of a Service that uses Messenger as its client interface is shown here. First is the Service itself,

publishing a Messenger to an internal Handler when bound:





public class MessengerService extends Service {

/** For showing and hiding our notification. */

NotificationManager mNM;

/** Keeps track of all current registered clients. */

ArrayList mClients = new ArrayList();

/** Holds last value set by a client. */

int mValue = 0;



/**

* Command to the service to register a client, receiving callbacks

* from the service. The Message's replyTo field must be a Messenger of

* the client where callbacks should be sent.

*/

static final int MSG_REGISTER_CLIENT = 1;



/**

* Command to the service to unregister a client, ot stop receiving callbacks

* from the service. The Message's replyTo field must be a Messenger of

* the client as previously given with MSG_REGISTER_CLIENT.

*/

static final int MSG_UNREGISTER_CLIENT = 2;



/**

* Command to service to set a new value. This can be sent to the

* service to supply a new value, and will be sent by the service to

* any registered clients with the new value.

*/

static final int MSG_SET_VALUE = 3;



/**

* Handler of incoming messages from clients.

*/

class IncomingHandler extends Handler {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case MSG_REGISTER_CLIENT:

mClients.add(msg.replyTo);

break;

case MSG_UNREGISTER_CLIENT:

mClients.remove(msg.replyTo);

break;

case MSG_SET_VALUE:

mValue = msg.arg1;

for (int i=mClients.size()-1; i>=0; i--) {

try {

mClients.get(i).send(Message.obtain(null,

MSG_SET_VALUE, mValue, 0));

} catch (RemoteException e) {

// The client is dead. Remove it from the list;

// we are going through the list from back to front

// so this is safe to do inside the loop.

mClients.remove(i);

}

}

break;

default:

super.handleMessage(msg);

}

}

}



/**

* Target we publish for clients to send messages to IncomingHandler.

*/

final Messenger mMessenger = new Messenger(new IncomingHandler());



@Override

public void onCreate() {

mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);



// Display a notification about us starting.

showNotification();

}



@Override

public void onDestroy() {

// Cancel the persistent notification.

mNM.cancel(R.string.remote_service_started);



// Tell the user we stopped.

Toast.makeText(this, R.string.remote_service_stopped,

Toast.LENGTH_SHORT).show();

}

/**

* When binding to the service, we return an interface to our messenger

* for sending messages to the service.

*/

@Override

public IBinder onBind(Intent intent) {

return mMessenger.getBinder();

}



/**

* Show a notification while this service is running.

*/

private void showNotification() {

// In this sample, we'll use the same text for the ticker and the expanded

notification

CharSequence text = getText(R.string.remote_service_started);



// Set the icon, scrolling text and timestamp

Notification notification = new Notification(R.drawable.stat_sample, text,

System.currentTimeMillis());



// The PendingIntent to launch our activity if the user selects this notification

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,

new Intent(this, Controller.class), 0);



// Set the info for the views that show in the notification panel.

notification.setLatestEventInfo(this,

getText(R.string.remote_service_label),

text, contentIntent);



// Send the notification.

// We use a string id because it is a unique number. We use it later to cancel.

mNM.notify(R.string.remote_service_started, notification);

}

}





If we want to make this service run in a remote process (instead of the standard one for its .apk), we can use

android:process in its manifest tag to specify one:









Note that the name "remote" chosen here is arbitrary, and you can use other names if you want additional processes.

The ':' prefix appends the name to your package's standard process name.



With that done, clients can now bind to the service and send messages to it. Note that this allows clients to register

with it to receive messages back as well:





/** Messenger for communicating with service. */

Messenger mService = null;

/** Flag indicating whether we have called bind on the service. */

boolean mIsBound;

/** Some text view we are using to show state information. */

TextView mCallbackText;



/**

* Handler of incoming messages from service.

*/

class IncomingHandler extends Handler {

@Override

public void handleMessage(Message msg) {

switch (msg.what) {

case MessengerService.MSG_SET_VALUE:

mCallbackText.setText("Received from service: " + msg.arg1);

break;

default:

super.handleMessage(msg);

}

}

}



/**

* Target we publish for clients to send messages to IncomingHandler.

*/

final Messenger mMessenger = new Messenger(new IncomingHandler());



/**

* Class for interacting with the main interface of the service.

*/

private ServiceConnection mConnection = new ServiceConnection() {

public void onServiceConnected(ComponentName className,

IBinder service) {

// This is called when the connection with the service has been

// established, giving us the service object we can use to

// interact with the service. We are communicating with our

// service through an IDL interface, so get a client-side

// representation of that from the raw service object.

mService = new Messenger(service);

mCallbackText.setText("Attached.");



// We want to monitor the service for as long as we are

// connected to it.

try {

Message msg = Message.obtain(null,

MessengerService.MSG_REGISTER_CLIENT);

msg.replyTo = mMessenger;

mService.send(msg);



// Give it some value as an example.

msg = Message.obtain(null,

MessengerService.MSG_SET_VALUE, this.hashCode(), 0);

mService.send(msg);

} catch (RemoteException e) {

// In this case the service has crashed before we could even

// do anything with it; we can count on soon being

// disconnected (and then reconnected if it can be restarted)

// so there is no need to do anything here.

}



// As part of the sample, tell the user what happened.

Toast.makeText(Binding.this, R.string.remote_service_connected,

Toast.LENGTH_SHORT).show();

}



public void onServiceDisconnected(ComponentName className) {

// This is called when the connection with the service has been

// unexpectedly disconnected -- that is, its process crashed.

mService = null;

mCallbackText.setText("Disconnected.");



// As part of the sample, tell the user what happened.

Toast.makeText(Binding.this, R.string.remote_service_disconnected,

Toast.LENGTH_SHORT).show();

}

};



void doBindService() {

// Establish a connection with the service. We use an explicit

// class name because there is no reason to be able to let other

// applications replace our component.

bindService(new Intent(Binding.this,

MessengerService.class), mConnection, Context.BIND_AUTO_CREATE);

mIsBound = true;

mCallbackText.setText("Binding.");

}



void doUnbindService() {

if (mIsBound) {

// If we have received the service, and hence registered with

// it, then now is the time to unregister.

if (mService != null) {

try {

Message msg = Message.obtain(null,

MessengerService.MSG_UNREGISTER_CLIENT);

msg.replyTo = mMessenger;

mService.send(msg);

} catch (RemoteException e) {

// There is nothing special we need to do if the service

// has crashed.

}

}



// Detach our existing connection.

unbindService(mConnection);

mIsBound = false;

mCallbackText.setText("Unbinding.");

}

}









Summary

Constants





int START_CONTINUATION_MASK Bits returned by onStartCommand(Intent, int, int)

describing how to continue the service if it is killed.





int START_FLAG_REDELIVERY This flag is set in onStartCommand(Intent, int, int)

if the Intent is a re-delivery of a previously delivered intent, because the

service had previously returned START_REDELIVER_INTENT

but had been killed before calling stopSelf(int) for that Intent.



int START_FLAG_RETRY This flag is set in onStartCommand(Intent, int, int)

if the Intent is a a retry because the original attempt never got to or

returned from onStartCommand(Intent, int, int).





int START_NOT_STICKY Constant to return from onStartCommand(Intent, int,

int): if this service's process is killed while it is started (after returning

from onStartCommand(Intent, int, int) ), and there

are no new start intents to deliver to it, then take the service out of the

started state and don't recreate until a future explicit call to

Context.startService(Intent).



int START_REDELIVER_INTENT Constant to return from onStartCommand(Intent, int,

int): if this service's process is killed while it is started (after returning

from onStartCommand(Intent, int, int)), then it will

be scheduled for a restart and the last delivered Intent re-delivered to it

again via onStartCommand(Intent, int, int).





int START_STICKY Constant to return from onStartCommand(Intent, int,

int): if this service's process is killed while it is started (after returning

from onStartCommand(Intent, int, int)), then leave

it in the started state but don't retain this delivered intent.





int START_STICKY_COMPATIBILITY Constant to return from onStartCommand(Intent, int,

int): compatibility version of START_STICKY that does not

guarantee that onStartCommand(Intent, int, int)

will be called again after being killed.





[Expand]



Inherited Constants





From class android.content.Context





String ACCESSIBILITY_SERVICE Use with getSystemService(String) to

retrieve a AccessibilityManager for giving

the user feedback for UI events through the registered

event listeners.





String ACCOUNT_SERVICE Use with getSystemService(String) to

retrieve a AccountManager for receiving intents

at a time of your choosing.





String ACTIVITY_SERVICE Use with getSystemService(String) to

retrieve a ActivityManager for interacting with

the global system state.





String ALARM_SERVICE Use with getSystemService(String) to

retrieve a AlarmManager for receiving intents at a

time of your choosing.

String AUDIO_SERVICE Use with getSystemService(String) to

retrieve a AudioManager for handling

management of volume, ringer modes and audio

routing.





int BIND_AUTO_CREATE Flag for bindService(Intent,

ServiceConnection, int): automatically

create the service as long as the binding exists.





int BIND_DEBUG_UNBIND Flag for bindService(Intent,

ServiceConnection, int): include

debugging help for mismatched calls to unbind.





int BIND_NOT_FOREGROUND Flag for bindService(Intent,

ServiceConnection, int): don't allow this

binding to raise the target service's process to the

foreground scheduling priority.





String CLIPBOARD_SERVICE Use with getSystemService(String) to

retrieve a ClipboardManager for accessing and

modifying the contents of the global clipboard.





String CONNECTIVITY_SERVICE Use with getSystemService(String) to

retrieve a ConnectivityManager for handling

management of network connections.





int CONTEXT_IGNORE_SECURITY Flag for use with

createPackageContext(String, int):

ignore any security restrictions on the Context being

requested, allowing it to always be loaded.





int CONTEXT_INCLUDE_CODE Flag for use with

createPackageContext(String, int):

include the application code with the context.





int CONTEXT_RESTRICTED Flag for use with

createPackageContext(String, int):

a restricted context may disable specific features.





String DEVICE_POLICY_SERVICE Use with getSystemService(String) to

retrieve a DevicePolicyManager for working

with global device policy management.





String DROPBOX_SERVICE Use with getSystemService(String) to

retrieve a DropBoxManager instance for

recording diagnostic logs.





String INPUT_METHOD_SERVICE Use with getSystemService(String) to

retrieve a InputMethodManager for accessing

input methods.





String KEYGUARD_SERVICE Use with getSystemService(String) to

retrieve a NotificationManager for

controlling keyguard.





String LAYOUT_INFLATER_SERVICE Use with getSystemService(String) to

retrieve a LayoutInflater for inflating layout

resources in this context.





String LOCATION_SERVICE Use with getSystemService(String) to

retrieve a LocationManager for controlling

location updates.





int MODE_APPEND File creation mode: for use with

openFileOutput(String, int), if the file

already exists then write data to the end of the existing

file instead of erasing it.





int MODE_PRIVATE File creation mode: the default mode, where the

created file can only be accessed by the calling

application (or all applications sharing the same user

ID).





int MODE_WORLD_READABLE File creation mode: allow all other applications to have

read access to the created file.





int MODE_WORLD_WRITEABLE File creation mode: allow all other applications to have

write access to the created file.





String NOTIFICATION_SERVICE Use with getSystemService(String) to

retrieve a NotificationManager for informing

the user of background events.





String POWER_SERVICE Use with getSystemService(String) to

retrieve a PowerManager for controlling power

management, including "wake locks," which let you

keep the device on while you're running long tasks.





String SEARCH_SERVICE Use with getSystemService(String) to

retrieve a SearchManager for handling searches.





String SENSOR_SERVICE Use with getSystemService(String) to

retrieve a SensorManager for accessing sensors.





String TELEPHONY_SERVICE Use with getSystemService(String) to

retrieve a TelephonyManager for handling

management the telephony features of the device.

String UI_MODE_SERVICE Use with getSystemService(String) to

retrieve a UiModeManager for controlling UI

modes.





String VIBRATOR_SERVICE Use with getSystemService(String) to

retrieve a Vibrator for interacting with the vibration

hardware.





String WALLPAPER_SERVICE Use with getSystemService(String) to

retrieve a com.android.server.WallpaperService for

accessing wallpapers.





String WIFI_SERVICE Use with getSystemService(String) to

retrieve a WifiManager for handling management

of Wi-Fi access.





String WINDOW_SERVICE Use with getSystemService(String) to

retrieve a WindowManager for accessing the

system's window manager.





Public Constructors





Service()





Public Methods





final getApplication()

Application

Return the application that owns this service.





abstract onBind(Intent intent)

IBinder

Return the communication channel to the service.





void onConfigurationChanged(Configuration newConfig)



Called by the system when the device configuration changes while your component is running.





void onCreate()



Called by the system when the service is first created.





void onDestroy()



Called by the system to notify a Service that it is no longer used and is being removed.





void onLowMemory()



This is called when the overall system is running low on memory, and would like actively running process

to try to tighten their belt.





void onRebind(Intent intent)



Called when new clients have connected to the service, after it had previously been notified that all had

disconnected in its onUnbind(Intent).





void onStart(Intent intent, int startId)



This method is deprecated. Implement onStartCommand(Intent, int, int) instead.



int onStartCommand(Intent intent, int flags, int startId)



Called by the system every time a client explicitly starts the service by calling

startService(Intent), providing the arguments it supplied and a unique integer token

representing the start request.





boolean onUnbind(Intent intent)



Called when all clients have disconnected from a particular interface published by the service.





final void setForeground(boolean isForeground)



This method is deprecated. This is a now a no-op, use startForeground(int,

Notification) instead. This method has been turned into a no-op rather than simply being

deprecated because analysis of numerous poorly behaving devices has shown that increasingly often the

trouble is being caused in part by applications that are abusing it. Thus, given a choice between

introducing problems in existing applications using this API (by allowing them to be killed when they would

like to avoid it), vs allowing the performance of the entire system to be decreased, this method was

deemed less important.





final void startForeground(int id, Notification notification)



Make this service run in the foreground, supplying the ongoing notification to be shown to the user while in

this state.





final void stopForeground(boolean removeNotification)



Remove this service from foreground state, allowing it to be killed if more memory is needed.





final void stopSelf()



Stop the service, if it was previously started.





final void stopSelf(int startId)



Old version of stopSelfResult(int) that doesn't return a result.





final stopSelfResult(int startId)

boolean

Stop the service if the most recent time it was started was startId.





Protected Methods

void dump(FileDescriptor fd, PrintWriter writer, String[] args)



Print the Service's state into the given stream.





void finalize()



Is called before the object's memory is being reclaimed by the VM.





[Expand]



Inherited Methods





From class android.content.ContextWrapper





void attachBaseContext(Context base)



Set the base context for this ContextWrapper.





boolean bindService(Intent service, ServiceConnection conn, int flags)



Connect to an application service, creating it if needed.





int checkCallingOrSelfPermission(String permission)



Determine whether the calling process of an IPC or you have been granted a

particular permission.





int checkCallingOrSelfUriPermission(Uri uri, int modeFlags)



Determine whether the calling process of an IPC or you has been granted

permission to access a specific URI.





int checkCallingPermission(String permission)



Determine whether the calling process of an IPC you are handling has been

granted a particular permission.





int checkCallingUriPermission(Uri uri, int modeFlags)



Determine whether the calling process and user ID has been granted

permission to access a specific URI.





int checkPermission(String permission, int pid, int uid)



Determine whether the given permission is allowed for a particular process and

user ID running in the system.





int checkUriPermission(Uri uri, int pid, int uid, int modeFlags)



Determine whether a particular process and user ID has been granted

permission to access a specific URI.

int checkUriPermission(Uri uri, String readPermission, String writePermission, int

pid, int uid, int modeFlags)



Check both a Uri and normal permission.





void clearWallpaper()



This method is deprecated. Use WallpaperManager.clear()

instead.





Context createPackageContext(String packageName, int flags)



Return a new Context object for the given application name.





String[] databaseList()



Returns an array of strings naming the private databases associated with this

Context's application package.





boolean deleteDatabase(String name)



Delete an existing private SQLiteDatabase associated with this Context's

application package.





boolean deleteFile(String name)



Delete the given private file associated with this Context's application package.





void enforceCallingOrSelfPermission(String permission, String message)



If neither you nor the calling process of an IPC you are handling has been

granted a particular permission, throw a SecurityException.





void enforceCallingOrSelfUriPermission(Uri uri, int modeFlags, String message)



If the calling process of an IPC or you has not been granted permission to

access a specific URI, throw SecurityException.





void enforceCallingPermission(String permission, String message)



If the calling process of an IPC you are handling has not been granted a

particular permission, throw a SecurityException.





void enforceCallingUriPermission(Uri uri, int modeFlags, String message)



If the calling process and user ID has not been granted permission to access a

specific URI, throw SecurityException.





void enforcePermission(String permission, int pid, int uid, String message)



If the given permission is not allowed for a particular process and user ID

running in the system, throw a SecurityException.





void enforceUriPermission(Uri uri, int pid, int uid, int modeFlags, String message)



If a particular process and user ID has not been granted permission to access a

specific URI, throw SecurityException.





void enforceUriPermission(Uri uri, String readPermission, String writePermission,

int pid, int uid, int modeFlags, String message)



Enforce both a Uri and normal permission.





String[] fileList()



Returns an array of strings naming the private files associated with this

Context's application package.





Context getApplicationContext()



Return the context of the single, global Application object of the current

process.





ApplicationInfo getApplicationInfo()



Return the full application info for this context's package.





AssetManager getAssets()



Return an AssetManager instance for your application's package.





Context getBaseContext()





File getCacheDir()



Returns the absolute path to the application specific cache directory on the

filesystem.





ClassLoader getClassLoader()



Return a class loader you can use to retrieve classes in this package.





ContentResolver getContentResolver()



Return a ContentResolver instance for your application's package.





File getDatabasePath(String name)



Returns the absolute path on the filesystem where a database created with

openOrCreateDatabase(String, int,

SQLiteDatabase.CursorFactory) is stored.

File getDir(String name, int mode)



Retrieve, creating if needed, a new directory in which the application can place

its own custom data files.





File getExternalCacheDir()



Returns the absolute path to the directory on the external filesystem (that is

somewhere on

Environment.getExternalStorageDirectory() where the

application can place cache files it owns.





File getExternalFilesDir(String type)



Returns the absolute path to the directory on the external filesystem (that is

somewhere on

Environment.getExternalStorageDirectory()) where the

application can place persistent files it owns.





File getFileStreamPath(String name)



Returns the absolute path on the filesystem where a file created with

openFileOutput(String, int) is stored.



File getFilesDir()



Returns the absolute path to the directory on the filesystem where files created

with openFileOutput(String, int) are stored.





Looper getMainLooper()



Return the Looper for the main thread of the current process.





String getPackageCodePath()



Return the full path to this context's primary Android package.





PackageManager getPackageManager()



Return PackageManager instance to find global package information.





String getPackageName()



Return the name of this application's package.





String getPackageResourcePath()



Return the full path to this context's primary Android package.





Resources getResources()

Return a Resources instance for your application's package.





SharedPreferences getSharedPreferences(String name, int mode)



Retrieve and hold the contents of the preferences file 'name', returning a

SharedPreferences through which you can retrieve and modify its values.





Object getSystemService(String name)



Return the handle to a system-level service by name.





Resources.Theme getTheme()



Return the Theme object associated with this Context.





Drawable getWallpaper()



This method is deprecated. Use WallpaperManager.get() instead.





int getWallpaperDesiredMinimumHeight()



This method is deprecated. Use

WallpaperManager.getDesiredMinimumHeight() instead.



int getWallpaperDesiredMinimumWidth()



This method is deprecated. Use

WallpaperManager.getDesiredMinimumWidth() instead.



void grantUriPermission(String toPackage, Uri uri, int modeFlags)



Grant permission to access a specific Uri to another package, regardless of

whether that package has general permission to access the Uri's content

provider.





boolean isRestricted()



Indicates whether this Context is restricted.





FileInputStream openFileInput(String name)



Open a private file associated with this Context's application package for

reading.





FileOutputStream openFileOutput(String name, int mode)



Open a private file associated with this Context's application package for

writing.





SQLiteDatabase openOrCreateDatabase(String name, int mode,

SQLiteDatabase.CursorFactory factory)

Open a new private SQLiteDatabase associated with this Context's application

package.





Drawable peekWallpaper()



This method is deprecated. Use WallpaperManager.peek() instead.





Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String

broadcastPermission, Handler scheduler)



Register to receive intent broadcasts, to run in the context of scheduler.





Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)



Register a BroadcastReceiver to be run in the main activity thread.





void removeStickyBroadcast(Intent intent)



Remove the data previously sent with

sendStickyBroadcast(Intent), so that it is as if the sticky

broadcast had never happened.





void revokeUriPermission(Uri uri, int modeFlags)



Remove all permissions to access a particular content provider Uri that were

previously added with grantUriPermission(String, Uri,

int).



void sendBroadcast(Intent intent)



Broadcast the given intent to all interested BroadcastReceivers.





void sendBroadcast(Intent intent, String receiverPermission)



Broadcast the given intent to all interested BroadcastReceivers, allowing an

optional required permission to be enforced.





void sendOrderedBroadcast(Intent intent, String receiverPermission,

BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String

initialData, Bundle initialExtras)



Version of sendBroadcast(Intent) that allows you to receive data

back from the broadcast.





void sendOrderedBroadcast(Intent intent, String receiverPermission)



Broadcast the given intent to all interested BroadcastReceivers, delivering

them one at a time to allow more preferred receivers to consume the broadcast

before it is delivered to less preferred receivers.





void sendStickyBroadcast(Intent intent)

Perform a sendBroadcast(Intent) that is "sticky," meaning the Intent

you are sending stays around after the broadcast is complete, so that others

can quickly retrieve that data through the return value of

registerReceiver(BroadcastReceiver,

IntentFilter).



void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver,

Handler scheduler, int initialCode, String initialData, Bundle initialExtras)



Version of sendStickyBroadcast(Intent) that allows you to

receive data back from the broadcast.





void setTheme(int resid)



Set the base theme for this context.





void setWallpaper(InputStream data)



This method is deprecated. Use WallpaperManager.set() instead.





void setWallpaper(Bitmap bitmap)



This method is deprecated. Use WallpaperManager.set() instead.





void startActivity(Intent intent)



Launch a new activity.





boolean startInstrumentation(ComponentName className, String profileFile, Bundle

arguments)



Start executing an Instrumentation class.





void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int

flagsValues, int extraFlags)



Like startActivity(Intent), but taking a IntentSender to start.





ComponentName startService(Intent service)



Request that a given application service be started.





boolean stopService(Intent name)



Request that a given application service be stopped.





void unbindService(ServiceConnection conn)



Disconnect from an application service.

void unregisterReceiver(BroadcastReceiver receiver)



Unregister a previously registered BroadcastReceiver.





From class android.content.Context





abstract boolean bindService(Intent service, ServiceConnection conn, int flags)



Connect to an application service, creating it if needed.





abstract int checkCallingOrSelfPermission(String permission)



Determine whether the calling process of an IPC or you have been granted a

particular permission.





abstract int checkCallingOrSelfUriPermission(Uri uri, int modeFlags)



Determine whether the calling process of an IPC or you has been granted

permission to access a specific URI.





abstract int checkCallingPermission(String permission)



Determine whether the calling process of an IPC you are handling has been

granted a particular permission.





abstract int checkCallingUriPermission(Uri uri, int modeFlags)



Determine whether the calling process and user ID has been granted

permission to access a specific URI.





abstract int checkPermission(String permission, int pid, int uid)



Determine whether the given permission is allowed for a particular process and

user ID running in the system.





abstract int checkUriPermission(Uri uri, int pid, int uid, int modeFlags)



Determine whether a particular process and user ID has been granted

permission to access a specific URI.





abstract int checkUriPermission(Uri uri, String readPermission, String writePermission, int

pid, int uid, int modeFlags)



Check both a Uri and normal permission.





abstract void clearWallpaper()



This method is deprecated. Use WallpaperManager.clear()

instead.





abstract Context createPackageContext(String packageName, int flags)

Return a new Context object for the given application name.





abstract String[] databaseList()



Returns an array of strings naming the private databases associated with this

Context's application package.





abstract boolean deleteDatabase(String name)



Delete an existing private SQLiteDatabase associated with this Context's

application package.





abstract boolean deleteFile(String name)



Delete the given private file associated with this Context's application package.





abstract void enforceCallingOrSelfPermission(String permission, String message)



If neither you nor the calling process of an IPC you are handling has been

granted a particular permission, throw a SecurityException.





abstract void enforceCallingOrSelfUriPermission(Uri uri, int modeFlags, String message)



If the calling process of an IPC or you has not been granted permission to

access a specific URI, throw SecurityException.





abstract void enforceCallingPermission(String permission, String message)



If the calling process of an IPC you are handling has not been granted a

particular permission, throw a SecurityException.









abstract void enforceCallingUriPermission(Uri uri, int modeFlags, String message)



If the calling process and user ID has not been granted permission to access a

specific URI, throw SecurityException.





abstract void enforcePermission(String permission, int pid, int uid, String message)



If the given permission is not allowed for a particular process and user ID

running in the system, throw a SecurityException.





abstract void enforceUriPermission(Uri uri, int pid, int uid, int modeFlags, String message)



If a particular process and user ID has not been granted permission to access a

specific URI, throw SecurityException.





abstract void enforceUriPermission(Uri uri, String readPermission, String writePermission,

int pid, int uid, int modeFlags, String message)



Enforce both a Uri and normal permission.

abstract String[] fileList()



Returns an array of strings naming the private files associated with this

Context's application package.





abstract Context getApplicationContext()



Return the context of the single, global Application object of the current

process.





abstract getApplicationInfo()

ApplicationInfo

Return the full application info for this context's package.





abstract getAssets()

AssetManager

Return an AssetManager instance for your application's package.





abstract File getCacheDir()



Returns the absolute path to the application specific cache directory on the

filesystem.





abstract getClassLoader()

ClassLoader

Return a class loader you can use to retrieve classes in this package.





abstract getContentResolver()

ContentResolver

Return a ContentResolver instance for your application's package.





abstract File getDatabasePath(String name)



Returns the absolute path on the filesystem where a database created with

openOrCreateDatabase(String, int,

SQLiteDatabase.CursorFactory) is stored.



abstract File getDir(String name, int mode)



Retrieve, creating if needed, a new directory in which the application can place

its own custom data files.





abstract File getExternalCacheDir()



Returns the absolute path to the directory on the external filesystem (that is

somewhere on

Environment.getExternalStorageDirectory() where the

application can place cache files it owns.





abstract File getExternalFilesDir(String type)



Returns the absolute path to the directory on the external filesystem (that is

somewhere on

Environment.getExternalStorageDirectory()) where the

application can place persistent files it owns.





abstract File getFileStreamPath(String name)



Returns the absolute path on the filesystem where a file created with

openFileOutput(String, int) is stored.



abstract File getFilesDir()



Returns the absolute path to the directory on the filesystem where files created

with openFileOutput(String, int) are stored.





abstract Looper getMainLooper()



Return the Looper for the main thread of the current process.





abstract String getPackageCodePath()



Return the full path to this context's primary Android package.





abstract getPackageManager()

PackageManager

Return PackageManager instance to find global package information.





abstract String getPackageName()



Return the name of this application's package.





abstract String getPackageResourcePath()



Return the full path to this context's primary Android package.





abstract Resources getResources()



Return a Resources instance for your application's package.





abstract getSharedPreferences(String name, int mode)

SharedPreferences

Retrieve and hold the contents of the preferences file 'name', returning a

SharedPreferences through which you can retrieve and modify its values.





final String getString(int resId, Object... formatArgs)



Return a localized formatted string from the application's package's default

string table, substituting the format arguments as defined in Formatter and

format(String, Object...).



final String getString(int resId)

Return a localized string from the application's package's default string table.





abstract Object getSystemService(String name)



Return the handle to a system-level service by name.





final getText(int resId)

CharSequence

Return a localized, styled CharSequence from the application's package's

default string table.





abstract getTheme()

Resources.Theme

Return the Theme object associated with this Context.





abstract Drawable getWallpaper()



This method is deprecated. Use WallpaperManager.get() instead.





abstract int getWallpaperDesiredMinimumHeight()



This method is deprecated. Use

WallpaperManager.getDesiredMinimumHeight() instead.



abstract int getWallpaperDesiredMinimumWidth()



This method is deprecated. Use

WallpaperManager.getDesiredMinimumWidth() instead.



abstract void grantUriPermission(String toPackage, Uri uri, int modeFlags)



Grant permission to access a specific Uri to another package, regardless of

whether that package has general permission to access the Uri's content

provider.





boolean isRestricted()



Indicates whether this Context is restricted.





final TypedArray obtainStyledAttributes(int resid, int[] attrs)



Retrieve styled attribute information in this Context's theme.





final TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int

defStyleRes)



Retrieve styled attribute information in this Context's theme.





final TypedArray obtainStyledAttributes(int[] attrs)



Retrieve styled attribute information in this Context's theme.

final TypedArray obtainStyledAttributes(AttributeSet set, int[] attrs)



Retrieve styled attribute information in this Context's theme.





abstract openFileInput(String name)

FileInputStream

Open a private file associated with this Context's application package for

reading.





abstract openFileOutput(String name, int mode)

FileOutputStream

Open a private file associated with this Context's application package for

writing.





abstract openOrCreateDatabase(String name, int mode,

SQLiteDatabase SQLiteDatabase.CursorFactory factory)



Open a new private SQLiteDatabase associated with this Context's application

package.





abstract Drawable peekWallpaper()



This method is deprecated. Use WallpaperManager.peek() instead.





abstract Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String

broadcastPermission, Handler scheduler)



Register to receive intent broadcasts, to run in the context of scheduler.





abstract Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter)



Register a BroadcastReceiver to be run in the main activity thread.





abstract void removeStickyBroadcast(Intent intent)



Remove the data previously sent with

sendStickyBroadcast(Intent), so that it is as if the sticky

broadcast had never happened.





abstract void revokeUriPermission(Uri uri, int modeFlags)



Remove all permissions to access a particular content provider Uri that were

previously added with grantUriPermission(String, Uri,

int).



abstract void sendBroadcast(Intent intent)



Broadcast the given intent to all interested BroadcastReceivers.





abstract void sendBroadcast(Intent intent, String receiverPermission)



Broadcast the given intent to all interested BroadcastReceivers, allowing an

optional required permission to be enforced.





abstract void sendOrderedBroadcast(Intent intent, String receiverPermission,

BroadcastReceiver resultReceiver, Handler scheduler, int initialCode, String

initialData, Bundle initialExtras)



Version of sendBroadcast(Intent) that allows you to receive data

back from the broadcast.





abstract void sendOrderedBroadcast(Intent intent, String receiverPermission)



Broadcast the given intent to all interested BroadcastReceivers, delivering

them one at a time to allow more preferred receivers to consume the broadcast

before it is delivered to less preferred receivers.





abstract void sendStickyBroadcast(Intent intent)



Perform a sendBroadcast(Intent) that is "sticky," meaning the Intent

you are sending stays around after the broadcast is complete, so that others

can quickly retrieve that data through the return value of

registerReceiver(BroadcastReceiver,

IntentFilter).



abstract void sendStickyOrderedBroadcast(Intent intent, BroadcastReceiver resultReceiver,

Handler scheduler, int initialCode, String initialData, Bundle initialExtras)



Version of sendStickyBroadcast(Intent) that allows you to

receive data back from the broadcast.





abstract void setTheme(int resid)



Set the base theme for this context.





abstract void setWallpaper(InputStream data)



This method is deprecated. Use WallpaperManager.set() instead.





abstract void setWallpaper(Bitmap bitmap)



This method is deprecated. Use WallpaperManager.set() instead.





abstract void startActivity(Intent intent)



Launch a new activity.





abstract boolean startInstrumentation(ComponentName className, String profileFile, Bundle

arguments)



Start executing an Instrumentation class.





abstract void startIntentSender(IntentSender intent, Intent fillInIntent, int flagsMask, int

flagsValues, int extraFlags)



Like startActivity(Intent), but taking a IntentSender to start.





abstract startService(Intent service)

ComponentName

Request that a given application service be started.





abstract boolean stopService(Intent service)



Request that a given application service be stopped.





abstract void unbindService(ServiceConnection conn)



Disconnect from an application service.





abstract void unregisterReceiver(BroadcastReceiver receiver)



Unregister a previously registered BroadcastReceiver.





From class java.lang.Object





Object clone()



Creates and returns a copy of this Object.





boolean equals(Object o)



Compares this instance with the specified object and indicates if they are

equal.





void finalize()



Is called before the object's memory is being reclaimed by the VM.





final getClass()

Class

Returns the unique instance of Class which represents this object's

class.





int hashCode()



Returns an integer hash code for this object.





final void notify()



Causes a thread which is waiting on this object's monitor (by means of

calling one of the wait() methods) to be woken up.





final void notifyAll()

Causes all threads which are waiting on this object's monitor (by means

of calling one of the wait() methods) to be woken up.





String toString()



Returns a string containing a concise, human-readable description of this

object.





final void wait(long millis, int nanos)



Causes the calling thread to wait until another thread calls the

notify() or notifyAll() method of this object or until the

specified timeout expires.





final void wait(long millis)



Causes the calling thread to wait until another thread calls the

notify() or notifyAll() method of this object or until the

specified timeout expires.





final void wait()



Causes the calling thread to wait until another thread calls the

notify() or notifyAll() method of this object.





From interface android.content.ComponentCallbacks





abstract onConfigurationChanged(Configuration newConfig)

void

Called by the system when the device configuration changes while your component is

running.





abstract onLowMemory()

void

This is called when the overall system is running low on memory, and would like actively

running process to try to tighten their belt.









Constants



public static final int START_CONTINUATION_MASK

Since: API Level 5

Bits returned by onStartCommand(Intent, int, int) describing how to continue the service if it is

killed. May be START_STICKY, START_NOT_STICKY, START_REDELIVER_INTENT, or

START_STICKY_COMPATIBILITY.



Constant Value: 15 (0x0000000f)





public static final int START_FLAG_REDELIVERY

Since: API Level 5

This flag is set in onStartCommand(Intent, int, int) if the Intent is a re-delivery of a previously

delivered intent, because the service had previously returned START_REDELIVER_INTENT but had been

killed before calling stopSelf(int) for that Intent.



Constant Value: 1 (0x00000001)





public static final int START_FLAG_RETRY

Since: API Level 5

This flag is set in onStartCommand(Intent, int, int) if the Intent is a a retry because the original

attempt never got to or returned from onStartCommand(Intent, int, int).



Constant Value: 2 (0x00000002)





public static final int START_NOT_STICKY

Since: API Level 5

Constant to return from onStartCommand(Intent, int, int): if this service's process is killed while it

is started (after returning from onStartCommand(Intent, int, int)), and there are no new start

intents to deliver to it, then take the service out of the started state and don't recreate until a future explicit call to

Context.startService(Intent). The service will not receive a onStartCommand(Intent,

int, int) call with a null Intent because it will not be re-started if there are no pending Intents to deliver.



This mode makes sense for things that want to do some work as a result of being started, but can be stopped when

under memory pressure and will explicit start themselves again later to do more work. An example of such a service

would be one that polls for data from a server: it could schedule an alarm to poll every N minutes by having the

alarm start its service. When its onStartCommand(Intent, int, int) is called from the alarm, it

schedules a new alarm for N minutes later, and spawns a thread to do its networking. If its process is killed while

doing that check, the service will not be restarted until the alarm goes off.



Constant Value: 2 (0x00000002)





public static final int START_REDELIVER_INTENT

Since: API Level 5

Constant to return from onStartCommand(Intent, int, int): if this service's process is killed while it

is started (after returning from onStartCommand(Intent, int, int)), then it will be scheduled for a

restart and the last delivered Intent re-delivered to it again via onStartCommand(Intent, int, int).

This Intent will remain scheduled for redelivery until the service calls stopSelf(int) with the start ID provided

to onStartCommand(Intent, int, int). The service will not receive a

onStartCommand(Intent, int, int) call with a null Intent because it will will only be re-started if it is

not finished processing all Intents sent to it (and any such pending events will be delivered at the point of restart).



Constant Value: 3 (0x00000003)





public static final int START_STICKY

Since: API Level 5

Constant to return from onStartCommand(Intent, int, int): if this service's process is killed while it

is started (after returning from onStartCommand(Intent, int, int)), then leave it in the started state

but don't retain this delivered intent. Later the system will try to re-create the service. Because it is in the started

state, it will guarantee to call onStartCommand(Intent, int, int) after creating the new service

instance; if there are not any pending start commands to be delivered to the service, it will be called with a null intent

object, so you must take care to check for this.

This mode makes sense for things that will be explicitly started and stopped to run for arbitrary periods of time, such

as a service performing background music playback.



Constant Value: 1 (0x00000001)





public static final int START_STICKY_COMPATIBILITY

Since: API Level 5

onStartCommand(Intent, int, int): compatibility version of

Constant to return from

START_STICKY that does not guarantee that onStartCommand(Intent, int, int) will be called

again after being killed.



Constant Value: 0 (0x00000000)







Public Constructors



public Service ()

Since: API Level 1









Public Methods



public final Application getApplication ()

Since: API Level 1

Return the application that owns this service.





public abstract IBinder onBind (Intent intent)

Since: API Level 1

Return the communication channel to the service. May return null if clients can not bind to the service. The returned

IBinder is usually for a complex interface that has been described using aidl.



Note that unlike other application components, calls on to the IBinder interface returned here may not happen on the

main thread of the process. More information about this can be found in Application Fundamentals: Processes and

Threads.



Parameters

intent The Intent that was used to bind to this service, as given to Context.bindService. Note that

any extras that were included with the Intent at that point will not be seen here.



Returns

 Return an IBinder through which clients can call on to the service.





public void onConfigurationChanged (Configuration newConfig)

Since: API Level 1

Called by the system when the device configuration changes while your component is running. Note that, unlike

activities, other components are never restarted when a configuration changes: they must always deal with the

results of the change, such as by re-retrieving resources.



At the time that this function has been called, your Resources object will have been updated to return resource

values matching the new configuration.

Parameters

newConfig The new device configuration.







public void onCreate ()

Since: API Level 1

Called by the system when the service is first created. Do not call this method directly.





public void onDestroy ()

Since: API Level 1

Called by the system to notify a Service that it is no longer used and is being removed. The service should clean up

an resources it holds (threads, registered receivers, etc) at this point. Upon return, there will be no more calls in to

this Service object and it is effectively dead. Do not call this method directly.





public void onLowMemory ()

Since: API Level 1

This is called when the overall system is running low on memory, and would like actively running process to try to

tighten their belt. While the exact point at which this will be called is not defined, generally it will happen around the

time all background process have been killed, that is before reaching the point of killing processes hosting service

and foreground UI that we would like to avoid killing.



Applications that want to be nice can implement this method to release any caches or other unnecessary resources

they may be holding on to. The system will perform a gc for you after returning from this method.





public void onRebind (Intent intent)

Since: API Level 1

Called when new clients have connected to the service, after it had previously been notified that all had

disconnected in its onUnbind(Intent). This will only be called if the implementation of

onUnbind(Intent) was overridden to return true.



Parameters

intent The Intent that was used to bind to this service, as given to Context.bindService. Note that

any extras that were included with the Intent at that point will not be seen here.







public void onStart (Intent intent, int startId)

Since: API Level 1





This method is deprecated.

Implement onStartCommand(Intent, int, int) instead.



public int onStartCommand (Intent intent, int flags, int startId)

Since: API Level 5

Called by the system every time a client explicitly starts the service by calling startService(Intent),

providing the arguments it supplied and a unique integer token representing the start request. Do not call this

method directly.



For backwards compatibility, the default implementation calls onStart(Intent, int) and returns either

START_STICKY or START_STICKY_COMPATIBILITY.

If you need your application to run on platform versions prior to API level 5, you can use the following model to

handle the older onStart(Intent, int) callback in that case. The handleCommand method is

implemented by you as appropriate:





// This is the old onStart method that will be called on the pre-2.0

// platform. On 2.0 or later we override onStartCommand() so this

// method will not be called.

@Override

public void onStart(Intent intent, int startId) {

handleCommand(intent);

}



@Override

public int onStartCommand(Intent intent, int flags, int startId) {

handleCommand(intent);

// We want this service to continue running until it is explicitly

// stopped, so return sticky.

return START_STICKY;

}





Parameters

intent The Intent supplied to startService(Intent), as given. This may be null if the service is

being restarted after its process has gone away, and it had previously returned anything except

START_STICKY_COMPATIBILITY.



flags Additional data about this start request. Currently either 0, START_FLAG_REDELIVERY, or

START_FLAG_RETRY.



startId A unique integer representing this specific request to start. Use with stopSelfResult(int).



Returns

 The return value indicates what semantics the system should use for the service's current started state. It

may be one of the constants associated with the START_CONTINUATION_MASK bits.

See Also

 stopSelfResult(int)



public boolean onUnbind (Intent intent)

Since: API Level 1

Called when all clients have disconnected from a particular interface published by the service. The default

implementation does nothing and returns false.



Parameters

intent The Intent that was used to bind to this service, as given to Context.bindService. Note that

any extras that were included with the Intent at that point will not be seen here.



Returns

 Return true if you would like to have the service's onRebind(Intent) method later called when new

clients bind to it.





public final void setForeground (boolean isForeground)

Since: API Level 1

This method is deprecated.

This is a now a no-op, use startForeground(int, Notification) instead. This method has

been turned into a no-op rather than simply being deprecated because analysis of numerous poorly behaving

devices has shown that increasingly often the trouble is being caused in part by applications that are abusing it.

Thus, given a choice between introducing problems in existing applications using this API (by allowing them to

be killed when they would like to avoid it), vs allowing the performance of the entire system to be decreased,

this method was deemed less important.





public final void startForeground (int id, Notification notification)

Since: API Level 5

Make this service run in the foreground, supplying the ongoing notification to be shown to the user while in this state.

By default services are background, meaning that if the system needs to kill them to reclaim more memory (such as

to display a large page in a web browser), they can be killed without too much harm. You can set this flag if killing

your service would be disruptive to the user, such as if your service is performing background music playback, so

the user would notice if their music stopped playing.



If you need your application to run on platform versions prior to API level 5, you can use the following model to call

the the older setForeground(boolean) or this modern method as appropriate:





private static final Class[] mStartForegroundSignature = new Class[] {

int.class, Notification.class};

private static final Class[] mStopForegroundSignature = new Class[] {

boolean.class};



private NotificationManager mNM;

private Method mStartForeground;

private Method mStopForeground;

private Object[] mStartForegroundArgs = new Object[2];

private Object[] mStopForegroundArgs = new Object[1];



/**

* This is a wrapper around the new startForeground method, using the older

* APIs if it is not available.

*/

void startForegroundCompat(int id, Notification notification) {

// If we have the new startForeground API, then use it.

if (mStartForeground != null) {

mStartForegroundArgs[0] = Integer.valueOf(id);

mStartForegroundArgs[1] = notification;

try {

mStartForeground.invoke(this, mStartForegroundArgs);

} catch (InvocationTargetException e) {

// Should not happen.

Log.w("ApiDemos", "Unable to invoke startForeground", e);

} catch (IllegalAccessException e) {

// Should not happen.

Log.w("ApiDemos", "Unable to invoke startForeground", e);

}

return;

}



// Fall back on the old API.

setForeground(true);

mNM.notify(id, notification);

}

/**

* This is a wrapper around the new stopForeground method, using the older

* APIs if it is not available.

*/

void stopForegroundCompat(int id) {

// If we have the new stopForeground API, then use it.

if (mStopForeground != null) {

mStopForegroundArgs[0] = Boolean.TRUE;

try {

mStopForeground.invoke(this, mStopForegroundArgs);

} catch (InvocationTargetException e) {

// Should not happen.

Log.w("ApiDemos", "Unable to invoke stopForeground", e);

} catch (IllegalAccessException e) {

// Should not happen.

Log.w("ApiDemos", "Unable to invoke stopForeground", e);

}

return;

}



// Fall back on the old API. Note to cancel BEFORE changing the

// foreground state, since we could be killed at that point.

mNM.cancel(id);

setForeground(false);

}



@Override

public void onCreate() {

mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

try {

mStartForeground = getClass().getMethod("startForeground",

mStartForegroundSignature);

mStopForeground = getClass().getMethod("stopForeground",

mStopForegroundSignature);

} catch (NoSuchMethodException e) {

// Running on an older platform.

mStartForeground = mStopForeground = null;

}

}



@Override

public void onDestroy() {

// Make sure our notification is gone.

stopForegroundCompat(R.string.foreground_service_started);

}





Parameters

id The identifier for this notification as per NotificationManager.notify(int,

Notification).



notification The Notification to be displayed.



See Also

 stopForeground(boolean)



public final void stopForeground (boolean removeNotification)

Since: API Level 5

Remove this service from foreground state, allowing it to be killed if more memory is needed.



Parameters

removeNotification If true, the notification previously provided to startForeground(int,

Notification) will be removed. Otherwise it will remain until a later call removes it

(or the service is destroyed).



See Also

 startForeground(int, Notification)



public final void stopSelf ()

Since: API Level 1

Stop the service, if it was previously started. This is the same as calling stopService(Intent) for this

particular service.



See Also

 stopSelfResult(int)



public final void stopSelf (int startId)

Since: API Level 1

Old version of stopSelfResult(int) that doesn't return a result.



See Also

 stopSelfResult(int)



public final boolean stopSelfResult (int startId)

Since: API Level 1

Stop the service if the most recent time it was started was startId. This is the same as calling

stopService(Intent) for this particular service but allows you to safely avoid stopping if there is a start

request from a client that you haven't yet seen in onStart(Intent, int).



Be careful about ordering of your calls to this function.. If you call this function with the most-recently received ID

before you have called it for previously received IDs, the service will be immediately stopped anyway. If you may

end up processing IDs out of order (such as by dispatching them on separate threads), then you are responsible for

stopping them in the same order you received them.



Parameters

startId The most recent start identifier received in onStart(Intent, int).



Returns

 Returns true if the startId matches the last start request and the service will be stopped, else false.

See Also

 stopSelf()







Protected Methods



protected void dump (FileDescriptor fd, PrintWriter writer, String[] args)

Since: API Level 1

Print the Service's state into the given stream. This gets invoked if you run "adb shell dumpsys activity service ". This

is distinct from "dumpsys ", which only works for named system services and which invokes the

dump(FileDescriptor, String[]) method on the IBinder interface registered with

ServiceManager.



Parameters

fd The raw file descriptor that the dump is being sent to.



writer The PrintWriter to which you should dump your state. This will be closed for you after you return.



args additional arguments to the dump request.







protected void finalize ()

Since: API Level 1

Is called before the object's memory is being reclaimed by the VM. This can only happen once the VM has detected,

during a run of the garbage collector, that the object is no longer reachable by any thread of the running application.



The method can be used to free system resources or perform other cleanup before the object is garbage collected.

The default implementation of the method is empty, which is also expected by the VM, but subclasses can override

finalize() as required. Uncaught exceptions which are thrown during the execution of this method cause it to

terminate immediately but are otherwise ignored.



Note that the VM does guarantee that finalize() is called at most once for any object, but it doesn't guarantee

when (if at all) finalize() will be called. For example, object B's finalize() can delay the execution of

object A's finalize() method and therefore it can delay the reclamation of A's memory. To be safe, use a

ReferenceQueue, because it provides more control over the way the VM deals with references during garbage

collection.



Throws

Throwable



Except as noted, this content is licensed under Apache 2.0. For details and restrictions, see the Content License.

Android 2.2 r1 - 14 May 2010 15:20

Site Terms of Service - Privacy Policy - Brand Guidelines



Related docs
Other docs by Stariya Js @ B...
Lab2_Fishing_lab_pack
Views: 0  |  Downloads: 0
JMK sample legal brief
Views: 1  |  Downloads: 0
DriveQ
Views: 0  |  Downloads: 0
cybersecurity_reform_-_senate_bill_eyes
Views: 0  |  Downloads: 0
Opening and Marketing
Views: 0  |  Downloads: 0
Making_it_Work_notes
Views: 0  |  Downloads: 0
First Announcement 7th ISFS_
Views: 0  |  Downloads: 0
as90173
Views: 0  |  Downloads: 0
VNAfashionshow2010
Views: 0  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!