| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

差分

ナビゲーションに移動 検索に移動
編集の要約なし
==[[Android アプリケーション基本]]==
[[Android]] |
*http://developer.android.com/guide/topics/fundamentals.html
====ソースコードとパッケージ====
*[[Android ]] アプリケーションは、Java で書かれます。
*コンパイルされたJavaコード(および必要な、データおよびリソースファイルも一緒に)は [http://developer.android.com/guide/developing/tools/aapt.html aapt ツール]により .apk という拡張子の Android パッケージとしてアーカイブされます。
*このファイルは、モバイルデバイスへアプリケーションを配布し、インストールするための乗り物となります。
====アプリケーションはどのように動くのか====
=====プロセスの起動とシャットダウン=====
*デフォルトでは、どのアプリケーションも、自分自身のLinux デフォルトでは、どのアプリケーションも、自分自身の[[Linux]] プロセスで起動されます。*[[Android ]] は、アプリケーションコードの実行が必要な時にプロセスを開始します。
*アプリケーションが、不要になり、他のアプリケーションがリソースを必要としたときにシャットダウンされます。
=====ユーザーとパーミッション=====
*デフォルトでは、どのアプリケーションもユニークなLinux デフォルトでは、どのアプリケーションもユニークな[[Linux]] ユーザーIDに結びつけられます。
*パーミッションも設定されるため、アプリケーションのファイルは、結局ユーザーであるアプリケーション自身からのみ参照できます。
*しかし、パーミッションを他のアプリケーションにエクスポートする方法も存在します。
*2つのアプリケーションで同じユーザーIDを共有することが可能。
*この場合、お互いのファイルを参照することが可能になる。
*システムリソースを節約するために、同じIDをもつアプリケーションを同じLinuxプロセスに配置して、同じVMを供給することができる。システムリソースを節約するために、同じIDをもつアプリケーションを同じ[[Linux]]プロセスに配置して、同じVMを供給することができる。
===アプリケーション コンポーネント===
====他のアプリケーションの利用====
*[[Android ]] の主要な機能は、あるアプリケーションが他のアプリケーションの要素を(許されていれば)活用できること。
*たとえば、あなたのアプリケーションがイメージのスクロールリストを表示する必要があり、他のアプリケーションが適切に開発されたスクローラーをもっており、他から利用できるようにしている場合、あなたは、自分で開発するよりも、そのスクローラーを呼び出すことができる。
*アプリケーションは、他のアプリケーションやリンクとコードを合併させない。アプリケーションは、他のアプリケーションや[[リンク]]とコードを合併させない。
*それよりは、他のアプリケーションの一部を必要に応じて、かなりシンプルに開始できる。
====コンポーネント====
*システムは、アプリケーションの一部を必要に応じてプロセスを開始でき、Javaオブジェクトをインスタンス化できる必要がある。システムは、アプリケーションの一部を必要に応じてプロセスを開始でき、[[Java]]オブジェクトをインスタンス化できる必要がある。*なので、アプリケーションはその他多くのシステムと異なっている、Android なので、アプリケーションはその他多くのシステムと異なっている、[[Android]] アプリケーションは、ひとつのエントリーポイント(main()関数のような)を持たない。
*そうではなく、それらは、次の4つの本質的なコンポーネントを持っており、システムは必要に応じてインスタンス化して起動する。
====ActivityActi[[vi]]ty====
=====概要=====
*アクティビティ は ユーザーが行えることを、一箇所に集中することを試みるビジュアルユーザーインターフェース を表現する。
=====アクティビティとは?=====
*あるアプリケーションはただひとつ、またはいくつかの Activity Acti[[vi]]ty から構成される。
*アクティビティをいくつ使うべきかなどはもちろんアプリケーションの設計によるが、典型的には、アクティビティのうちひとつが最初のアクティビティとしてマークされ、アプリケーションが起動したときにユーザーに表示される。
*ひとつのアクティビティを他へ移動することは、現在のアクティビティを完了させ、次を起動させること。
*ビューは、アクティビティとユーザの意思疎通が行われる場所
*例えば、ビューが小さなイメージを表示し、ユーザーがそのイメージをタップすることで、アクションを開始する。
*[[Android ]] は数多くの既製のビューを持っている。ボタン、テキスト、スクロールバー、メニュー、チェックボックスなど
*ビューの階層は、アクティビティのウィンドウに、[http://developer.android.com/reference/android/app/Activity.html#setContentView(android.view.View) Activity.setContentView]により置かれる。
*Content View は View オブジェクトのルート。[http://developer.android.com/guide/topics/ui/index.html さらなる情報]
====ServiceSer[[vi]]ce====
=====サービスとは?=====
*サービスは、ビジュアルなユーザーインターフェースを持たず、バックグラウンドで不定期に起動される。
*なので、それらは、他のコンポーネント、ユーザーインターフェースをブロックすることはない。しばしば、他のスレッドを時間のかかるタスクのために呼び出す。
====Broadcast Receiver[[R]]eceiver====
*ブロードキャストレシーバーは、ブロードキャストの受信と再送信以外なにもしないコンポーネント
*多くのブロードキャストはシステムコードから送信される。例えば、タイムゾーンの変更通知、バッテリーの低下、写真がとられた、ユーザーが言語設定を変えた。など多くのブロードキャストはシステムコードから送信される。例えば、タイムゾーンの変更通知、バッテリーの低下、写真がとられた、ユーザーが[[言語]]設定を変えた。など
*アプリケーションも、ブロードキャストをはじめられる。例えば、なにがしかのデータのデバイスへのダウンロードが完了し、利用可能になったことを、他のアプリケーションに知らせる。
*アプリケーションは、重要と考えれば、いくつでもどんな通知にも対応するようブロードキャストレシーバーをもつことができる。
*すべてのブロードキャストレシーバーは、BroadcastReciever基底クラスを継承する。すべてのブロードキャストレシーバーは、Broadcast[[R]]eciever基底クラスを継承する。
*ブロードキャストレシーバーはユーザーインターフェースを表示しない。
*しかしながら、受け取った情報へのレスポンスとして、アクティビティを起動することがある。もしくは、NotificatonManager を使って、ユーザーに通知する。
*典型的には永続的なアイコンをユーザーがメッセージを受け取れるようにステータスバーに配置する
====Content providerspro[[vi]]ders====
*コンテントプロバイダーは他のアプリケーションから利用できるように特定のアプリケーションのデータを作成する。
*データはSQLiteデータベースなど、ファイルシステムに保存できる。データは[[SQL]]iteデータベースなど、ファイルシステムに保存できる。*コンテントプロバイダーは、ContentoProvider コンテントプロバイダーは、ContentoPro[[vi]]der 基底クラスを継承し、他のアプリケーションが受け取り保存できるデータ型を制御する標準的なメソッドを実装する
*しかしながら、アプリケーションは、これらのメソッドを直接呼び出さない。
*その代わり、ContentResolver その代わり、Content[[R]]esolver オブジェクトを 利用し変わりに呼び出す。*ContentResolver はどんなコンテントプロバイダーにも通信できる。プロバイダーと協力してプロセス間のコミュニケーションを管理する。はどんなコンテントプロバイダーにも通信できる。プロバイダーと協力してプロセス間の[[コミュニケーション]]を管理する。
===コンポーネントを活性化する インテント===
*ほかの3つのコンポーネント ー アクティビティ、サービス、ブロードキャストレシーバー ー は インテント非同期メッセージにより活性化される。
*インテントは、[http://developer.android.com/reference/android/content/Intent.html Intent オブジェクト]であり、メッセージ内容を保持する。
*アクティビティとサービスの為に、とりわけ、インテントはリクエストされたアクションを命名し、操作対象となるデータのURIを特定する。アクティビティとサービスの為に、とりわけ、インテントはリクエストされたアクションを命名し、操作対象となるデータのU[[R]]Iを特定する。
*例えば、インテントはイメージをユーザーに提示またはユーザーにテキストを編集させるアクティビティへリクエストを運ぶ
*ブロードキャストレシーバーには、インテントオブジェクトは通知されたアクションに命名する。
*応答アクティビティは、自身の[http://developer.android.com/reference/android/app/Activity.html#getIntent() getIntent()] メソッドにより起動された初期インテントを見ることができる。
*Android は アクティビティの[http://developer.android.com/reference/android/app/Activity.html#onNewIntent(android.content.Intent) onNewIntent()] メソッドをそれをつづくインテントに渡すために呼び出す。
*一つのアクティビティはしばしば次を開始する。アクティビティから結果が変えることが想定される場合、startActivity一つのアクティビティはしばしば次を開始する。アクティビティから結果が変えることが想定される場合、startActi[[vi]]ty() の代わりに、startActivityForResultの代わりに、startActi[[vi]]tyForResult() により開始する。
*例えば、ユーザーが写真を選択することでアクティビティが開始され、選択された写真を結果として受け取ることが想定される場合。
*結果はアクティビティの [http://developer.android.com/reference/android/app/Activity.html onActivityResult()]メソッドから、インテントオブジェクトとしてかえってくる。

案内メニュー