Не удается запустить службу в другом процессе и привязать - PullRequest
0 голосов
/ 02 августа 2020

Мне нужно что-то для сохранения данных и их обработки, когда мое приложение закрывается, и я решил использовать удаленный процесс. Я читал документацию по Android, форумы и StackOverflow, но не понимаю, как запустить службу и привязаться к ней. Удовольствие "startService (Intent)" c не вызывает никаких функций в службе, ни OnCreate, ни Constructor. Мой код для кнопки «Пуск»

Intent serviceIntent = new Intent(this, MyService.class);
startService(serviceIntent);

Мой код для кнопки «Привязать»:

if(!bindService(serviceIntent, connection, BIND_AUTO_CREATE))
   Log.e(TAG, "failed to bind: " + serviceIntent);

Все время, которое я вижу здесь

E / ServiceExample / Activity (14702): не удалось связать: Intent {act = com.example.services.RemoteService cmp = com.example.services / .RemoteService}

Соединение ServiceConnection:

new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName className, IBinder service) {
        MainActivity.this.service = RemoteService.Stub.asInterface(service);
        serviceConnected = true;
        Log.i(TAG, "Service connected");
    }

    @Override
    public void onServiceDisconnected(ComponentName arg0) {
        serviceConnected = false;
        service = null;
        Log.i(TAG, "Service disconnected");
    }
};

MyService имеет счетчик, который я хочу оставить за пределами основного приложения и функций для его увеличения или уменьшения, а также имеет вход в конструктор, функции onCreate (), onBind () и onUnbind ().

public class MyService extends Service {
private final String TAG = "ServiceExample/Service";
int counter = 0;

public MyService(){
    Log.i(TAG, this.getClass().getName() + " Constructor");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i(TAG,"MyService onStartCommand, startId " + startId);
    return Service.START_STICKY;
}

@Override
public IBinder onBind(Intent intent) {
    Log.i(TAG, "MyService onBind");
    return new RemoteService.Stub() {
        @Override
        public int inc() throws RemoteException {
            counter++;
            return counter;
        }
        @Override
        public int dec() throws RemoteException {
            counter--;
            return counter;
        }
        @Override
        public int counter() throws RemoteException {
            return counter;
        }
    };
}

@Override
public boolean onUnbind(Intent intent) {
    Log.i(TAG, "MyService onUnbind");
    return true;
}

@Override
public void onCreate() {
    Log.i(TAG, "MyService onCreate");
    super.onDestroy();
}

@Override
public void onDestroy() {
    Log.i(TAG, "MyService onDestroy");
    super.onDestroy();
}
}

Кроме того, у меня есть интерфейс RemoteService AIDL:

interface RemoteService {
int inc();
int dec();
int counter();
}

Что я делаю не так?

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