2

私はAndroid用のMonoTouch/Monoに少し慣れていません。私はiOSおよびAndroidアプリ用のプラットフォームで作業しており、ネイティブコードをC#に移植する過程にあります。

私たちのアプリは画像を表示します。ただし、Monoには一般的な画像タイプはありません。Mono for Androidでは、オプションが使用されていますBitmap(サブクラス化できません)。またはBitmapDrawable、iOSではがありUIImageます。

アプリ内の一部のコードをプラットフォーム間でより一貫性のあるものにするために、画像を処理するための共通のクラスを作成することをお勧めします。このクラスは基本的に、対応する「ネイティブ」クラスのファサードです。このクラスに持たせたい機能の1つは、バイトの配列から画像オブジェクトを作成することです。現在、私のコードは次のようになっています(そして正常に動作します):

using System;

#if ANDROID
using Android.Graphics;
using Android.Graphics.Drawables;
#else
using MonoTouch.UIKit;
using MonoTouch.Foundation;
#endif

namespace OurCompany.Core
{
#if ANDROID
    public class Image : BitmapDrawable
    {
        public Image (byte[] bytes) : base(BitmapFactory.DecodeByteArray (bytes, 0, bytes.Length))
        {

        }
    }   
#else
    public class Image : UIImage
    {
        public Image (byte[] bytes) : base(NSData.FromArray(bytes), 1)
        {

        }
    }
#endif
}

今、私はこのセットアップを使用して遭遇する可能性のある問題はありますか?このような設定でパフォーマンス、キャッシュ、またはその他の問題が発生する可能性があるかどうかを知りたいです。

4

1 に答える 1

2

はい、それは理にかなっています。

個人的には、#ifを使用する代わりにインターフェイスを使用するアプローチを好みますが、インターフェイスはリファクタリングやテストなどでより適切に機能し、新しいプラットフォーム(mac、winrt、wpなど)に移植すると、アプローチの拡張性が向上します。

インターフェイスを注意深く設計する限り、特定のパフォーマンスの問題にぶつかることはありませんが、コードがピクセル配列レベルで機能し始めた場合は、ネイティブの最適化の機会を逃している可能性があります。

同様の分野でのいくつかのアイデア(描画)については、 https://github.com/praeclarum/CrossGraphicsでのFrankの作業を参照してください。

于 2013-02-12T07:27:41.707 に答える