Несколько действий, привязанных к услуге - PullRequest
0 голосов
/ 03 августа 2010

У меня есть сервисный компонент (общая задача для всех моих приложений), который может быть вызван любым из приложений. Я пытаюсь получить доступ к объекту службы из всех действий, я заметил, что тот, который создал службу [startService (intent)], имеет правильную информацию. Но отдых не получает необходимой информации. Мой код, как показано ниже:

// Activity.java
public void onCreate(Bundle savedInstanceState) {
    ...

    Intent intent = new Intent (this.context, Service.class) ;
    this.context.startService(intent) ;
    this.context.bindService(intent, this, Context.BIND_AUTO_CREATE) ;
    ...
    String result = serviceObj.getData() ;
}

public void onServiceConnected(ComponentName name, IBinder service) {
    serviceObj = ((Service.LocalBinder)service).getService();
    timer.scheduleAtFixedRate(task, 5000, 60000 ) ;
}



// Service.java

private final IBinder mBinder = new LocalBinder();

public class LocalBinder extends Binder {
    Service getService() {
        return Service.this;
    }
}

public void onCreate() {
    super.onCreate();
    context = getApplicationContext() ;
}

public void onStart( Intent intent, int startId ) {

... some processing is done here...

}

public IBinder onBind(Intent intent) {
    return mBinder;
}

Если я вызову startService (намерение). он создает новый сервис и работает параллельно с другим сервисом.

Если я не вызываю startService (намерение), serviceObj.getData () возвращает нулевое значение.

Может ли кто-нибудь просветить меня, где я ошибся.

Любой указатель будет очень полезен ..

Спасибо и всего наилучшего, Вини

1 Ответ

7 голосов
/ 03 августа 2010

Если я вызову startService (намерение). он создает новый сервис и работает параллельно с другим сервисом.

Нет, это не так. Будет работать не более одного экземпляра вашей службы.

Если я не вызываю startService (намерение), serviceObj.getData () возвращает нулевое значение.

startService() не имеет ничего общего с моим чтением вашего кода. Вы пытаетесь использовать serviceObj в onCreate(). Это никогда не сработает. bindService() - это асинхронный вызов. Вы не можете использовать serviveObj, пока не будет вызван onServiceConnected(). onServiceConnected() не будет вызываться до тех пор, пока не вернется onCreate().

Также:

  • Хотя бывают случаи, когда вам могут понадобиться и startService(), и bindService(), в нормальном случае они оба не нужны.
  • Не использовать getApplicationContext().
...