Межпроцессное взаимодействие без сервиса в Android - PullRequest
0 голосов
/ 10 июня 2019

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

Существует ли способ межпроцессного взаимодействия (надежным способом) без создания службы?

...