Я новичок в Android. Я пытаюсь вызвать метод в другом процессе, который не связан ни с одним сервисом. Просто для одного метода мне нужно обернуть его с помощью службы? Есть ли способ сделать межпроцессное взаимодействие без экземпляра службы?
Это мой текущий способ вызова метода addTwoNumbers
, который выполняется в другом процессе.
class BinderService implements ServiceConnection {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
try {
myService = IMyAidlInterface.Stub.asInterface(service);
int result = myService.addTwoNumbers(5, 6);
Toast.makeText(getApplicationContext(), "Value of add two numbers is : " + result, Toast.LENGTH_SHORT);
Log.i("RESULT", " : Value of result is " + result);
} catch (RemoteException ex) {
Log.e("Error", "Remote exception when querying service : " + ex);
}
}
@Override
public void onServiceDisconnected(ComponentName name) {
myService = null;
}
};
Я обертываю addTwoNumbers
внутри службы для межпроцессного взаимодействия.
public class MyFirstService extends Service {
public MyFirstService() {
}
@Override
public int onStartCommand(Intent intent, int flag, int startId) {
Log.i("INFO", "Inside on start command.");
Toast.makeText(getApplicationContext(), "Inside on start command", Toast.LENGTH_SHORT);
return Service.START_STICKY;
}
@Override
public void onCreate() {
super.onCreate();
Log.i("SERVICE", "Creating..........");
Toast.makeText(getApplicationContext(), "Service on create called", Toast.LENGTH_SHORT);
}
@Override
public void onDestroy() {
super.onDestroy();
Log.i("SERVICE", "Destroying........");
Toast.makeText(getApplicationContext(), "Service destroyed", Toast.LENGTH_SHORT);
}
@Override
public IBinder onBind(Intent intent) {
Log.i("SERVICE", "Binding .......");
Toast.makeText(getApplicationContext(), "Binding .....", Toast.LENGTH_SHORT);
// TODO: Return the communication channel to the service.
return new IMyAidlInterface.Stub() {
@Override
public int addTwoNumbers(int a, int b) throws RemoteException {
return a + b;
}
};
}
}
Я чувствовал, что не использую Service
для цели, для которой он предназначен. И еще одна вещь, которую я мог бы найти, - это когда стоимость вызова метода в другом процессе увеличивается из-за создания и уничтожения сервиса каждый раз. Я пробовал вещательный подход. Но иногда не уверены, когда (может быть, когда система находится под высоким давлением памяти), трансляция не принимается должным образом. В основном пытался использовать шаблон публикация-подписка вместо того, чтобы тянуть каждый раз.
Существует ли способ межпроцессного взаимодействия (надежным способом) без создания службы?