2011/11/06

Activity間やサービス間でデータを共有する方法


複数のActivity間やサービスでデータを共有するにはIntentのExtra、preferenceやDatabase
など様々な方法がありますが、Extraでは貧弱だけれどpreferenceやDBなどを使用
するほどでもない場合には下記の方法があります。

【android.app.Application クラス】
android.app.Applicationクラスを使用すればグローバルにアプリケーションの
状態を保持することができます。
通常、ActivityはconfigChangeを契機に再起動され、メンバ変数も特別な処理を
行わない限り初期化されます。
そういったActivityのライフサイクルに左右されず、アプリケーション(プロセス)
の開始~終了までデータを保管できる場所としてApplicationクラスが使用できます。
これはアプリケーション内の各ActivityがgetApplication()を使ってアクセスできます。
Applicationクラスを使用するにはAndroidManifest.xmlに登録することで自動的に
インスタンス化されます。
→使用方法は下記が参考になります
 http://techbooster.jpn.org/andriod/application/2353/


【public static】
staticなフィールドやメソッドは複数のアクティビティやサービスからアクセス
できる方法として使用することができます。
気を付けないといけないのは、staticフィールドはActivityのライフサイクルに
左右されないということです。
ライフサイクルに伴い初期化や後処理を行う必要がある場合は別途管理する必要
があります。

Android Developerサイトにも情報が載っていますので参考にしてみてください。
http://developer.android.com/resources/faq/framework.html

以上です。

2011/11/01

端末空き容量が無い場合の試験を実施する方法


端末ROMの空き容量を0(端末ROM使用量をフル)にする方法です。
空き容量が0になるとストレージへのファイルIOやデータベースの更新操作時等、
さまざまな場面で実行時例外がスローされます。

ハイスペックな端末の場合は気にならない問題かもしれませんが、そうではな
い端末ももちろんあります。
この問題に対応する/しないを決めた上でアプリケーションを設計・実装しましょう。

まずは、端末のファイルシステムのブロックサイズを調べます。
※下記はAndroid4.0のエミュレータで検証

# df /data
-実行結果-
Filesystem             Size   Used   Free   Blksize
/data                   64M     7M    56M   4096

実行結果より、ブロックサイズは4096Byteとわかります。
実行結果の見方は下記
 - Size:ROMの総容量
 - Used:ROMの使用量
 - Free:ROMの空き容量
 - Blksize:ファイルシステムのブロックサイズ

次に、サイズ指定でファイルを生成します。
サイズは ブロックサイズ*個数 で指定します。
下記は1000ブロックのdummyファイルを作成するコマンドです。
 - bs:ブロックサイズを指定します
 - count:作成するブロック数を指定します
 - of:ファイルパスを指定します
# dd if=/dev/zero of=/data/dummy bs=4096 count=1000
-実行結果-
1000+0 records in
1000+0 records out
4096000 bytes transferred in 0.260 secs (15753846 bytes/sec)

上記をみると 4096*1000 で4096000Byte(4MB)のdummyファイルが作成されたこ
とがわかります。

dfデータでもう一度空き容量を見てみましょう。
# df /data
Filesystem             Size   Used   Free   Blksize
/data                   64M    11M    52M   4096

Freeが56M→52Mに減っていることがわかります。

※ワンポイント
一気に空き容量0となるようにdummyファイルを作成してもよいですが、
そうなると一切のファイルIOができなくなってしまいます。
試験する際は、一時的に空き容量を少し回復できるようにファイルパスを変えて
2段階でdummyファイルを作成することをお勧めします。

例)
// 空き容量回復用のファイルdummy1を作成
# dd if=/dev/zero of=/data/dummy1 bs=4096 count=1000

// 空き容量を無くす用のファイルdummy2を作成
# dd if=/dev/zero of=/data/dummy2 bs=4096 count=99999999

少しだけ空き容量を作成したい場合はdummy1を削除すればOKです。

以上です。