У вас есть пользовательский интерфейс или активность, связанная с этой услугой?Если это так, вы можете создать свою службу так, чтобы она работала в том же процессе, что и ваша активность.В этом сценарии ваша служба будет уничтожена только в случае уничтожения приложения, что обычно происходит, когда в системе недостаточно памяти или другие сценарии прекращения работы приложения.
Этот способ запуска службы обычно называется работающимместный сервис.Ссылки на запуск локальной службы можно найти в примере API Android SDK или по адресу http://developer.android.com/reference/android/app/Service.html#LocalServiceSample.
. В локальной службе вместо переопределения onStartCommand вы переопределяете onBind, а в методе onBind вы возвращаете IBinder(удаленный объект).Объект IBinder будет содержать метод, подобный getService (), который будет возвращать ссылку на ваш сервис.Получив ссылку на ваш сервис, вы можете вызывать методы сервиса непосредственно из своей деятельности.
Вот пример кода для сервиса (я набрал его, поэтому он может не скомпилироваться, но он должен передать концепцию):
public class LocalService extends Service
{
@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();
public class LocalBinder{
public LocalService getService()
{
return LocalService.this;
}
}
//other code...
public void myServiceMethod()
{
//do whatever
}
}
Пример кода для клиента:
public class ClientActivity extends Activity
{
//a handle to our service which we can then make calls to
private LocalService myLocalService;
private boolean mIsBound;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate();
mIsBound = false;
//blah blah
doBindService();
//sometime later...
if(mIsBound)
myLocalService.myServiceMethod();
}
private void doBindService()
{
bindService(new Intent(ClientActivity.this, LocalService.class), mConnection, Context.BIND_AUTO_CREATE);
}
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className, IBinder service) {
//called when service is connected
myLocalService = ((LocalService.LocalBinder)service).getService();
mIsBound = true;
}
public void onServiceDisconnected(ComponentName className) {
// called when service is disconnected
myLocalService = null;
mIsBound = false;
}
}
}