読者です 読者をやめる 読者になる 読者になる

ひつじのにっき

mhidakaのにっきです。たまに長文、気が向いたとき更新。

【MB-1】Androidのデータ共有 - Google Developer Day 2009

ネットワークをデータ共有に活用する、という意識が全くなかったので新鮮でした。
ちょうど勉強しているところを解説してもらえたので、
とても満足度が高いセッションでした。

Androidのデータ共有
株式会社ケイブ 安生 誠 氏
	
1.Intent
	大きく分けて二通り
	明示的	起動したいActivityのクラス名を直接記述する
	暗黙的 Intent.ACTION DIAL:Intentの種類を指定

Action Intentはいくつか種類がある
	電話番号にダイヤルするなどアクションが指定できる

	Broadcast Intent
		Androidから発行される。たとえばTIME_TICKであれば1秒ごとに。

Intentに渡されるデータは?
	実質Stringのみ。Intent.putExtra()を使えばタイプの異なる一つ以上のデータを渡したいときに便利
	ExtraDataで扱えるデータはArrayとその他の型色々。IntentにIntentを渡すことも可能

ExtraData
	ビットマップなどbyte[]で渡すことができる
	Intentでビットマップ渡しが可能だが、あまりに大きいファイルは渡すことができない。
	Seializableなど渡すことができる

Intentの勘所
	共有というより、一方的に渡す程度。


2.SharedPreferences
	マルチプロセスには非対応(いずれ対応)
	Private SharedPreferences PrefsPrivate;
	読み込み側は書き込んだ方のアプリケーションとコンテキストが違う場合、
	書き込み側コンテキストを呼び出す必要がある?

	パーミッションが設定出来る(MODE)
		同一アプリケーション内なら気にしないでよい
		実際はファイルへ書きだしている
		SheredPrefsディレクトリの下にXMLファイルとして書き出し。
		ファイルのパーミッションの変更がMODEの変更(PRIVATEやWORLD)


3.ContentProvider
	android.content.ContetnProvider
	実装が必要なメソッドがいくつかあります。
	Query, Insert, Upate, Delete, getTypeなど
	実際はデータベースです。

	使い方は2通り
	getContentResolver.queryメソッド
	Activity.ManagedQueayメソッド

	事前準備としてAndroidManifest.xmlにContentProvider利用を宣言する必要がある

 	メソッドの実装は、行いたい動作を記入してください(これは必要)
 	
	DBへのアクセスだけならSQLiteを使うことで、ContentProviderを使わなくても可能
		共有しない場合はこちらを推奨
		Android.database.Sqlほにゃらら

4.Network
	Web Server(Cloud)を経由したファイル共有
		データはサーバへおきたい
		Java.net.HtttpURLConnection

	注意点
		UI Thread(Main Thread)でHTTP送受信はNG
		同期待ちするのでサーバーからレスポンスが帰ってくるまで止まってしまう
	
	ANRダイアログが発生
	(条件)
		・ユーザーからの入力に対して5秒間反応しない
		・BroadcastReceiverに対する処理に10秒以上かかっている
	
	ANRを避けるために
		通信が発生している間にユーザに何もせずに待っていてほしい場合、
		プログレスバーーやダイアログを表示させる
		
		Backgroundで通信していてほしい場合、
		Threadクラスを継承したり、Runnable Interfaceを実装する形で
		通信処理を行うクラスを別スレッド化しておく

・Pros And Cons
	メリットとデメリット
	さきほど説明した順に処理が遅くなっている。
	ただし、ハードウェア、利用状況で大きく異なるので参考程度に。
	
	Intent				簡単
	SharedPrefs			パーミッションの設定が可能
	ContentProvider		SQLが使えるため、データの取り出し方が自在
						データ型も豊富。
	ネットワーク		記憶容量をきにしなくていい
						データの永続性が端末に依存しない
						共有範囲が自分の端末に限定されない

	デメリット
	Intent				ストレージに存在するデータとは限らない
						もともと共有するためのものではなくて、一方的に投げるもの
						データ量はオンメモリなので少ない
						必要に応じて自分で保存しないといけない
	SharedPrefs			データ型が少ない。細かいパーミッション設定は難しい(むり)
	ContentProvider 	準備に手間がかかる。SQLを覚える必要がある
	ネットワーク		データの取り出し、書き込みに時間がかかる(ネットワーク依存)
						処理時間も推定しづらい。
						→ UXに注意を払う必要がある
						→ バッテリーに優しくない
まとめ
	その都度、最適と思われる方法を。(会場笑い)
	ほかにもSDカードや内蔵容量にファイルとして保存する方法がある
	Androidが搭載されているハードウェア、実行環境によって
	メリット、デメリットは変わるため、考慮に入れて設計しましょう


お知らせ
	Android−SDK-Japan
	日本アンドロイドの会
		各種WGによる勉強会もあります!