【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による勉強会もあります!