Ошибка сохранения службы Android - PullRequest
0 голосов
/ 15 сентября 2011

Я использую следующий код для предотвращения остановки моего сервиса Android:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    //return super.onStartCommand(intent, flags, startId);
    return START_STICKY;
}

, но это мешает моей службе работать.Я здесь не в себе ... помогите, пожалуйста!

Ответы [ 3 ]

1 голос
/ 15 сентября 2011

У вас есть пользовательский интерфейс или активность, связанная с этой услугой?Если это так, вы можете создать свою службу так, чтобы она работала в том же процессе, что и ваша активность.В этом сценарии ваша служба будет уничтожена только в случае уничтожения приложения, что обычно происходит, когда в системе недостаточно памяти или другие сценарии прекращения работы приложения.

Этот способ запуска службы обычно называется работающимместный сервис.Ссылки на запуск локальной службы можно найти в примере 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;

    }

   }

}
0 голосов
/ 15 сентября 2011

Используйте метод startForeground вместо.Из службы JavaDoc:

Запущенная служба может использовать API startForeground (int, Notification) , чтобы перевести службу в состояние переднего плана, где система считает ее чем-топользователь активно осведомлен и, таким образом, не является кандидатом на убийство при нехватке памяти.(По-прежнему теоретически возможно уничтожение службы под сильным давлением памяти со стороны текущего приложения переднего плана, но на практике это не должно вызывать беспокойства.)

0 голосов
/ 15 сентября 2011

Краткий ответ - вы не можете остановить остановку службы для Android, и есть очень мало причин, чтобы постоянно поддерживать постоянную службу.

Если вам нужно запускать некоторый код по расписанию для своего приложения, рассмотрите возможность использования Android AlarmManager, который работает аналогично заданию cron в UNIX.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...