каковы недостатки RPC относительно передачи сообщений?

Попробуйте так, если вам нужно получить округленное изображение ..

Ваш класс MainActivity.java

public class MainActivity extends Activity {
    private static final int REQUEST_CODE = 1;
    private Bitmap bitmap;
    private ImageView imageView;
    Bitmap roundedBitmapImage;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.result);

    }

    public void pickImage(View View) {
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        startActivityForResult(intent, REQUEST_CODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK)


            try {
                // We need to recycle unused bitmaps
                if (bitmap != null) {
                    bitmap.recycle();
                }
                InputStream stream = getContentResolver().openInputStream(
                        data.getData());
                bitmap = BitmapFactory.decodeStream(stream);
                stream.close();

               /* Bitmap bitmap1=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
                Bitmap bitmap2=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

                Bitmap resultingImage=Bitmap.createBitmap(320, 480, bitmap1.getConfig());

                Canvas canvas = new Canvas(resultingImage);

                Paint paint = new Paint();
                paint.setAntiAlias(true);
                Path path=new Path();
                path.lineTo(150, 0);
                path.lineTo(230, 120);
                path.lineTo(70, 120);
                path.lineTo(150, 0);

                canvas.drawPath(path, paint);

                paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
                canvas.drawBitmap(bitmap2, 0, 0, paint);*/

               //-------> compositeImageView.setImageBitmap(resultingImage);

                // Use this when to provide any shape to image i.e Fit image to any shape.
                // under mentioned taking reference from Rounder class. Finally changing image in round shape.
                // Here we are passing reference  bitmap.
                roundedBitmapImage = new  Rounder().getRoundedShape(bitmap);

                imageView.setImageBitmap(roundedBitmapImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

И ваш класс округлителя ..

/ ** Этот класс обрезает изображение до круглой формы * /

public class Rounder {
    public Bitmap getRoundedShape(Bitmap scaleBitmapImage) {
        int targetWidth = 125;
        int targetHeight = 125;
        Bitmap targetBitmap = Bitmap.createBitmap(targetWidth, targetHeight,
                Bitmap.Config.ARGB_8888);

        Canvas canvas = new Canvas(targetBitmap);

        Path path = new Path();

        path.addCircle(((float) targetWidth - 1) / 2,
                ((float) targetHeight - 1) / 2,
                (Math.min(((float) targetWidth), ((float) targetHeight)) / 2),
                Path.Direction.CCW);

        canvas.clipPath(path);

        Bitmap sourceBitmap = scaleBitmapImage;

        canvas.drawBitmap(sourceBitmap, new Rect(0, 0, sourceBitmap.getWidth(),
                sourceBitmap.getHeight()), new Rect(0, 0, targetWidth,
                targetHeight), null);

        return targetBitmap;
    }
}
19
задан Anonymous 7 June 2009 в 18:08
поделиться

2 ответа

Как правило, RPC обеспечивает более высокий уровень абстракции, чем некоторые другие средства межпроцессного взаимодействия. Это, возможно, делает его проще в использовании, чем примитивы более низкого уровня. Для этой абстракции вы можете заплатить некоторое снижение производительности из-за маршалинга / демаршалинга и, возможно, придется иметь дело с дополнительной сложностью конфигурации для простых сценариев.

Возможно, вас заинтересует этот тезис (pdf) Джеки Silcock, в котором обсуждаются различия между передачей сообщений, RPC и распределенной разделяемой памятью в отношении нескольких различных показателей производительности и реализации. Вы также можете прочитать одну из статей, основанных на диссертации: Передача сообщений, удаленные вызовы процедур и Распределенная общая память как коммуникация Парадигмы для распределенных систем (pdf)

16
ответ дан 30 November 2019 в 03:12
поделиться

Вы говорите о RPC и обмене сообщениями? Как в (обычно) асинхронном обмене сообщениями? Если это то, о чем вы говорите, то обмен сообщениями имеет тенденцию быть более надежным за счет сложности и дополнительной инфраструктуры.

Самый простой пример - если у вас есть сценарий, в котором вы RPC-> RPC-> RPC, вы в конечном итоге имея стек вызовов глубиной 3 процесса / машины. Любой из этих процессов / машины может выйти из строя во время обработки, и весь стек раскрутится.

Если бы вы обменивались сообщениями, фактическая связь между процессами намного меньше. Вы передаете сообщение, и вы уже в пути. Теперь, если один из процессов выйдет из строя, есть большая вероятность того, что он будет перезапущен с того места, где он остановился, поскольку обычно сообщение все еще находится в очереди где-то, ожидая, пока новый процесс его получит.

26
ответ дан 30 November 2019 в 03:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: