エントリー

Flexモバイルアプリ(Adobe AIR アプリ)を開発する際には、 LabelItemRendererIconItemRenderer 以外の、MXMLベースのアイテムレンダラークラスを使用することがパフォーマンスのために非推奨になっているのですが、PCデバイス用アプリを開発する要領でMXMLベースにてカスタムアイテムレンダラークラスを実装してみたものと、使用が推奨されているActionScript3.0ベースのモバイルデバイス用アイコンアイテムレンダラークラスをそのまま適用してみたものとでは、実際にどのくらい差が出るのか、ちょっと試してみました。

The Performance on Adobe AIR Mobile Application w/the Android Device;
(MXML Based CustomItemRenderer Class extends s:ItemRenderer w/o ContentCache) VS (AS3 Based s:IconItemRenderer Class)

Results

モバイル用に最適化されたアイテムレンダラーの圧勝!!でした。

IconItemRendererだと、画像の読み込みとキャッシュ化が一旦終わってしまえば後はもうぬるぬる動いてくれます。

 

実際に実行しているところを、ムービーで撮ってみました。携帯で撮ったので、画質悪いです。。。

実行結果 (ムービー)

vsItemRenderer.f4v (動画ファイル: 1分05秒, H.264/AVC, FLV/F4V形式, 5MB)

To view this page ensure that Adobe Flash Player version 11.0.0 or greater is installed.

 

Source Code

以下、今回の比較のために用意したテストアプリのソースコードです。

独自に実装したアイテムレンダラークラス中で、マジックナンバー使ってたりして、あまり宜しくないコードだったりします。

実行可能アプリ部分など
  • メインアプリケーション(実行クラス)
  • ホームビューコンポーネント
  • スタイルシート

mxml(exec) (Project)/src/IconItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:TabbedViewNavigatorApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
								  xmlns:s="library://ns.adobe.com/flex/spark" 
								  applicationDPI="160">
	
	<fx:Style source="./assets/styles/style.css" />
	
	<s:ViewNavigator label="HomeView" width="100%" height="100%" firstView="views.HomeView" />
	<s:ViewNavigator label="MXMLView" width="100%" height="100%" firstView="views.MXMLView" />
	<s:ViewNavigator label="ASView" width="100%" height="100%" firstView="views.ASView" />
	
</s:TabbedViewNavigatorApplication>

mxml (Project)/src/views/HomeView.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" 
		title="HomeView">
	
	<s:Label text=" 通常のカスタムアイテムレンダラー(MXMLで記述)によるリスト表示のパフォーマンスと、モバイルリスト用に最適化されたアイテムレンダラー(ASで記述)によるリスト表示のパフォーマンスの比較" 
			 width="100%" paddingTop="20" paddingRight="20" paddingLeft="20" fontFamily="uzura_cff" />
	
</s:View>

css (Project)/src/assets/styles/style.css

/* CSS file */
@namespace s "library://ns.adobe.com/flex/spark";

@font-face {
	src: url("./assets/fonts/uzura.ttf");
	fontFamily: uzura_cff;
	fontStyle: normal;
	fontWeight: normal;
	embedAsCFF: true;
	advancedAntiAliasing: true;
}

@font-face {
	src: url("./assets/fonts/uzura.ttf");
	fontFamily: うずらフォント;
	fontStyle: normal;
	fontWeight: normal;
	embedAsCFF: false;
	advancedAntiAliasing: true;
}

* {
	fontFamily: うずらフォント;
}

 

PCデバイス用アプリを開発する要領でMXMLベースにてカスタムアイテムレンダラークラスを実装してみたものの部分
  • 前者の比較用ビューコンポーネント
  • MXMLベースで実装したカスタムアイテムレンダラー

mxml (Project)/src/views/MXMLView.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" 
		title="MXMLView">
	
	<fx:Declarations>
		<s:ArrayCollection id="sampleData">
			<fx:Object name="鹿目まどか" 
					   description="「もしも――もしも、だよ?魔法でどんな願い事でも叶えてもらえる、って言われたら、どうする?」" 
					   image="twitter_madoka.jpg" />
			<!-- ...(以下、このようなデータが20項目連続。ここでは省略)... -->
		</s:ArrayCollection>
	</fx:Declarations>
	
	<s:List id="sparkCustomItemRendereredList" 
			dataProvider="{sampleData}" 
			labelField="name" 
			width="100%" 
			height="100%" 
			itemRenderer="renderers.customItemRenderer" />
	
</s:View>

mxml (Project)/src/renderers/CustomItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:ItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
				xmlns:s="library://ns.adobe.com/flex/spark"
				opaqueBackground="0xFFFFFF" 
				cacheAsBitmap="true">
	
	<s:layout>
		<s:HorizontalLayout paddingTop="8" 
							paddingBottom="8" 
							paddingLeft="8" 
							paddingRight="8" 
							gap="8" 
							horizontalAlign="center" 
							verticalAlign="middle"/>
	</s:layout>
	
	<s:BitmapImage id="iconDisplay" 
				   smooth="false" 
				   source="./assets/images/{data.image}" 
				   width="128" 
				   height="128" />
	
	<s:VGroup gap="6" horizontalAlign="left">
		<s:Label id="labelDisplay" 
				 width="{this.width - 176}" 
				 text="{data.name}"
				 fontFamily="uzura_cff" />
		<s:Label id="messageDisplay" 
				 width="{this.width - 176}" 
				 fontSize="14"
				 text="{data.description}" 
				 fontFamily="uzura_cff" />
	</s:VGroup>
	
	<s:BitmapImage id="decoratorDisplay" 
			 	   smooth="false" 
				   source="@Embed('./assets/images/arrow.png')" 
				   width="16" 
				   height="16" />
	
</s:ItemRenderer>

 

使用が推奨されているActionScript3.0ベースのモバイルデバイス用アイコンアイテムレンダラークラスをそのまま適用してみたものの部分
  • 後者の比較用ビューコンポーネント
  • モバイル用に最適化されたアイコンアイテムレンダラー

mxml (Project)/src/views/ASView.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
		xmlns:s="library://ns.adobe.com/flex/spark" 
		title="ASView">
	
	<fx:Declarations>
		<s:ArrayCollection id="sampleData">
			<fx:Object name="鹿目まどか" 
					   description="「もしも――もしも、だよ?魔法でどんな願い事でも叶えてもらえる、って言われたら、どうする?」" 
					   image="./assets/images/twitter_madoka.jpg" />
			<!-- ...(以下、このようなデータが20項目連続。ここでは省略)
		</s:ArrayCollection>
	</fx:Declarations>
	
	<s:List id="sparkCustomItemRendereredList" 
			dataProvider="{sampleData}" 
			labelField="name" 
			width="100%" 
			height="100%" 
			itemRenderer="renderers.IconItemRenderer" />
	
</s:View>

mxml (Project)/src/renderers/IconItemRenderer.mxml

<?xml version="1.0" encoding="utf-8"?>
<s:IconItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
					xmlns:s="library://ns.adobe.com/flex/spark" 
					labelField="name" 
					messageField="description" 
					iconField="image" 
					iconWidth="128" 
					iconHeight="128" 
					iconDelay="100" 
					decorator="@Embed('./assets/images/arrow.png')" >
</s:IconItemRenderer>

 

 

次は、IconItemRendererクラスを拡張して、モバイル用に最適化&機能拡張したカスタムアイテムレンダラーを、実装してみる練習をしてみるつもりです。

ページ移動

トラックバック

  • トラックバックはまだありません。

トラックバックURL

http://chsmea.net/~mioproject/freo/trackback/172

コメント

  • コメントはまだありません。

コメント登録

  • コメントを入力してください。
登録フォーム
名前 *
URL
コメント *
閲覧制限 *
【スパム対策】 2 × 2 × 2 = ? (半角数字で)

ユーティリティ

user profile

calendar

102024/1112
S M T W T F S
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

tag cloud