Browsing articles in "アプリケーション"

onSaveInstanceStateでインスタンスを保存する

3月 8, 2011   //   by @mhidaka   //   アプリケーション  //  No Comments

onSaveInstanceStateメソッドを使ってActivityのインスタンスを保存/復帰させる方法を紹介します。onSaveInstanceState/onRestoreInstanceStateメソッドは永続的なデータ保存には利用できませんが、一時的にインスタンスを保存するケースでは威力を発揮します。

アプリケーションを起動する際、現在表示されているアプリケーションはbackgroundにまわり、新しいアプリが起動します。backgroundに回ったアプリケーションはAndroidのアプリケーション履歴の”backstack”モデルに従い、履歴としてスタックします。

Android端末のメモリが豊富に残っていれば、backgroundのActivityのインスタンスは維持されますが、メモリが少なくなった際は破棄されます。onSaveInstanceState/onRestoreInstanceStateメソッドが役立つのは”システムによりインスタンスが破棄されるケース(次に表示されるまでにしばらく間があったとき)”です。
エミュレータ上では自分以外のアプリケーションが存在することが少ないため、注意が必要です。

インスタンスの保存/復帰

onSaveInstanceStateメソッドは全てのシチュエーションで呼ばれるわけではありません。
必ず保存する必要があるデータなどはライフサイクルモデルに従い、onPauseメソッドを利用してください。

onSaveInstanceState/onRestoreInstanceState

メソッド 説明
onSaveInstanceState(Bundle outState) Bundleにデータ保存する
onRestoreInstanceState(Bundle savedInstanceState) Bundleより復帰する

サンプルコード

続きをどうぞ

Read more >>

ClipboardManagerを使用してテキストのコピーと貼り付けを行う

3月 6, 2011   //   by kei_i_t   //   アプリケーション  //  No Comments

今回はテキストのコピーと貼り付けの方法を紹介します。

今回のサンプルは上段のEditTextから文字をコピーして下段のEditTextに貼り付けするサンプルを用意しました。(サンプルの取得はこちらからSVNなどを使用してダウンロードして下さい。)

※追記(2011/3/8):ClipboardManagerはAPI Level1(android.text.ClipboardManager)API Level11(android.content.ClipboardManager)の2種類ありますが、
今回の記事ではAPI Level1(android.text.ClipboardManager)の方を紹介しています。
Android3.0以上で開発する場合はAPI Level11(android.content.ClipboardManager)を使用する事が推奨されています。

詳細は以下から。

Read more >>

AndroidでZIPファイルを作成する

3月 6, 2011   //   by kseto   //   アプリケーション  //  1 Comment

java.util.zipパッケージを使えばAndroidアプリケーションからZIPファイルを作成することができます。
たとえばアプリケーションで扱うデータをZIPファイルに圧縮して外部ストレージに保存するというような用途で利用すると良いでしょう。

詳細は続きからどうぞ。

Read more >>

Android開発者が知るべき10のこと

3月 1, 2011   //   by @mhidaka   //   アプリケーション, ユーザインターフェース  //  6 Comments

本記事はAndroid DevelopersのDesigning for Seamlessnessを意訳、加筆したものです。Androidアプリをシームレスに連携させるためのノウハウを紹介します。

特性を理解する

アプリケーションが高速に動作し、レスポンスが良くても、アプリケーション遷移やダイアログ表示を乱用した無計画なUI、不用意なデータの喪失、意図しないタイミングでの操作妨害など知らず知らずのうちにUXの良くない設計になっているかもしれません。これらの問題はどのように避ければ良いでしょう?

  • アプリケーションが動作するコンテキスト
  • Androidフレームワークの特性(アプリケーションへどんな影響を与えるか)

を理解することが開発の手助けになります。

ユーザ操作を妨げない

Original Update by mujitra
Original Update by mujitra

ユーザ操作のシームレス性で問題になるケースとしてよくあるのが、他のアクティブなアプリケーションを無視して、自分のダイアログを表示してしまう場合です。つまり、内部動作としてはアプリケーションのバックグラウンドで動作するプロセス(サービス、ブロードキャストレシーバー)が何らかのイベントに反応してダイアログ表示するケースです。

とくにエミュレータ上でアプリケーションを開発、テストしていると他の要素が排除されているため、上記は無害に感じるでしょう。しかし実際のデバイス上で実行される場合では、バックグラウンドで実行中のプロセスがダイアログを表示しようとした場合、必ずしもアクティブではありません(ユーザーフォーカスを持っていないかもしれません)。
ユーザーが何をしていても、ダイアログをポップアップするのは良くありません。

この問題を避けるためには、アプリケーションはユーザーに通知するための適切なフレームワーク(Notification)を使うべきです。Notificationによりアプリケーションは、(バックグラウンドで検知したイベントのため)現在のユーザー操作を遮ることなくステータスバーにアイコンを表示して通知できます。

また別の課題としてonPause()や他のライフサイクルメソッドを正しく実装していないために起こる作業中データの破棄や状態不正があります。
アプリケーションで使用するデータを公開するなら、標準規格の生データやデータベース経由で行うよりも、ContentProviderを利用したほうがAndroidらしく、連携しやすいでしょう。

これら例が共通して示すことはシステムと他のアプリケーションと協調することの重要さです。
Androidシステムはブラックボックスのソースコードの集合より、疎結合したコンポーネントの集合としてアプリケーションを扱うように設計されています。

アプリケーションを「疎結合したコンポーネントの集合」として扱うことで、
他のアプリケーションとシームレスかつ美しく統合することができる利点があります

Android開発者が知るべき10のこと

つづきをどうぞ

Read more >>

Fragmentを動的に変化させる

2月 26, 2011   //   by UpDown-G   //   アプリケーション, ユーザインターフェース  //  1 Comment

PreferenceFragmentを使って2Paneな設定画面を作成する」「Fragmentを使ってMenuを動的に作成する」にて、Android3.0で追加された、Fragmentについて紹介してきました。

今回も、Fragmentの機能を紹介していきます。
FragmentはActivityなどと同じ様に、ライフサイクルを持ちます。
それらを確認した上で、Button操作による、Fragmentの追加/編集を行っていきましょう。

Read more >>

DefaultHttpClientでBasic認証使ったアクセスを行う

2月 23, 2011   //   by kkato   //   アプリケーション  //  No Comments

「DefaultHttpClientを使ってコンテンツを取得する」でWeb上のコンテンツを取得する方法を説明しました。

DefalutHttpClientではURLを指定してコンテンツを取得することが可能ですが、場合によってはそのURLにアクセスするには認証が必要なことがあります。

今回はBasic認証が必要なURLにアクセスしてコンテンツを取得する方法を説明します。

それでは続きからどうぞ

Read more >>

カメラの画像プレビューからのIntentから画像を取得する

2月 20, 2011   //   by kei_i_t   //   アプリケーション  //  No Comments

今回はカメラのプレビュー画面の共有ボタンから発行されるIntentから、画像を取得する方法を紹介します。

詳細は以下から。

Read more >>

ThumbnailUtilsを使って動画ファイルのサムネイルを作成する

2月 20, 2011   //   by kseto   //   アプリケーション  //  No Comments

ThumbnailUtilsクラスを使えば簡単に動画ファイルのサムネイルを作成することができます。

詳細は続きからご覧下さい。
※2011/02/22 記事を加筆・修正しました!

Read more >>

Drag and Dropを用いてViewをドラッグする

2月 19, 2011   //   by UpDown-G   //   アプリケーション  //  No Comments

android3.0から、startDrop()メソッドをViewにセットすることで、容易にドラッグ&ドロップできるようになりました。

今回、TextViewをドラッグ可能にカスタムし、ボタン上をドラッグさせ、最後にボタン上にドロップすることで、Buttonの色を変化させるサンプルについて説明します。

サンプルは、わかりやすいようにシンプルに記述しております。

※現在公開されているHoneycombのSDKはプレビュー版の為、正式版では実装が異なる可能性があります。

それでは続きをどうぞ、、、

Read more >>

Serviceを使う(1) LocalServiceによる常駐型アプリ

2月 15, 2011   //   by @mhidaka   //   アプリケーション  //  1 Comment

Androidで常駐型アプリケーションを作成する場合に便利なServiceについてライフサイクル・使い方を解説します。サービスの利用例はステータス通知(Notification)を変化させる等をご確認ください。Serviceを使う(1)では簡単化のため、Remote Messenger Serviceを次回以降として、LocalServiceに特化して解説します。

  • Serviceのライフサイクル
    • onCreate / onStartCommand / onDestroyの3つの状態遷移
    • サービスの実行方法によってライフサイクルが異なる
  • サービスの実行方法はContext#startServiceとContext#bindServiceの2種類
  • startService/stopService
    • Service全般として実行中はServiceからActivityへIntentの発行が可能
    • サービス起動後はActivityからServiceを制御する経路がない
    • Serviceの生存期間はActivityに依存しない。明示的にstopServiceが呼ばれるまで動き続ける。
  • bindService/unbindService
    • バインド(bind)という仕組みを使い、ActvitiyとServiceでコネクションを確立する(接続する)
    • バインドを使うことでActivityからServiceを制御できる
    • Serviceの生存期間はコネクションに依存。コネクションが切断されるとServiceは終了する。

サンプルコード、詳細は以下から。はじめに一般的なサービスのライフサイクル、startServiceによるサービス起動を紹介します。バインドのサンプルコードは記事後半になるので、適宜読み飛ばしてください。
Read more >>

技術書新刊 発売中

アンドロイドアカデミアには、CIやテスト、互換検証など実務に生きるノウハウをあつめています

技術書新刊 発売中

Android Next!はAndroid 7.0に対応したはじめての技術書です!


The Web Explorer 2はCSSの中央寄せやWebAudioなど未来を読み解く一冊です


Revised TypeScript in DefinitelylandはTypeScript 2.0(β)に対応した解説書です。インストールから型定義まで幅広くサポートしています


技術書をかこう!はエンジニアらしい執筆環境を構築、HowTo本です