Мне нужно что-то для сохранения данных и их обработки, когда мое приложение закрывается, и я решил использовать удаленный процесс. Я читал документацию по 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();
}
Что я делаю не так?