アンドロイドのよくわからん状態のメモ

昔書いた中途半端な状態のAndroidの雑多なメモ。

以下に、Intent Receiver という言葉がでてくるけども 現在では Broadcast Receiver と呼ぶっぽい。 (2008/5/25の書籍を参考にしたんだけど書籍名わすれた)

Androidのコーディングスタイルルール

規約:Androidコードスタイルガイド - Google 検索

http://www.textdrop.net/android/code-style-ja.html

  • Exception や Throwable をキャッチしない。
  • cache節の中身は必ず記述する。何も処理する必要がない場合でも理由をコメントにして残す
  • ファイナライザは使ってはいけない
  • ファイルの先頭にJavadocを必ず記述すること
  • メソッドはできるだけ40行以内で簡潔なものにする
  • ローカル変数のスコープは最小限にする
  • ローカル変数ははじめて使うところで宣言する
  • インデントにはタブを使わない。スペース4つ。
  • Non-public, Non-staticなフィールド名は m ではじめる
  • スタティックフィールド名は s ではじめる
  • 中括弧は省略しない

Androidプロジェクトの構成

src
├ jp.fernweh
│ └ ***Activity.java
├ gen
└ jp.fernweh
  └ R.java 自動生成されるファイルで編集してはダメ、ゼッタイ。
Android *.* アンドロイドのライブラリ
asset メモとかを置いておく場所でプログラムの動作自体には関わらない
res リソースフォルダ
├ drawable-*** 画像ファイル置き場
├ layout
│└ main.xml レイアウトの設定をするファイル
└ values
  ├ strings.xml 文字列データファイル
  └ *.xml *印に入るのは colors, dimentions, styles, attrなど。それぞれのリソースを記録するXMLを作成する…とはいっても一箇所にまとめても良いし、ファイルの名前も自由

AndroidManifest.xml プロジェクトのマニフェストファイル。user-permissionタグでアプリケーションの利用制限の設定をしたりできる。
default.properties
proguard.cfg

・resフォルダ(リソースフォルダ) 画像とか音楽ファイルとか?
┣ layout : main.xml
┣ values:string.xml - この中にHello World の中身が入っている
  main.xml をダブルクリックでしばらくまつ→黒いの表示->右クリック->表示->プロパティ
┣ gen:中身をいじると死ぬ。触るな危険。
┣ AndroidManifest.xml:これはよくいじるファイル。プロジェクトのプロファイル。マニフェストファイル。下のタブAndroidManifest.xml
┣ asset:メモ的なファイルをおいておく場所。プログラムには影響しない場所らしい
┣
┣
┣

Androidアプリケーションで重要な4つのコンポーネント

  • Activity
  • Intent Receiver
  • Service
  • Content Provider

これら4つがもっとも重要なコンポーネントでこれらを組み合わせてアプリケーションを構築する。具体的にどう構築するかは AndroidManifest.xml の application ブロックに書く。

Acticity

画面制御の元になっているもので、これが無ければAndroidに何も表示できない。 Activityクラスを継承したクラスファイルのインスタンスを作ることで1つの画面ができあがる。
また、マニフェストファイルに必ず記述する必要がある。

  • 画面の作成
  • 画面の遷移
  • IntentとIntentフィルタ

明示的インテント(Explicit Intent)と暗黙的インテント(Implicit Intent)

  • ライフサイクル

インスタンスなし・Invisible・Visible・Forground - View:画面の構成要素、画面部品 - Viewgroup - アダプタービュー - テーマ

ライフサイクルあたりでぐぐるべし

Intent Receiver

  • Intent は Activity または IntentReceiver に投げられる
  • Intent Receiverは画面に依存しない処理をバックグラウンドで行う
  • Notification と Notification Manager

Service

  • 画面を持たないバックグラウンドに常駐するプログラム
  • Activity から Service にバインドして操作する
  • RPC(Remote Procedue Call)により通信する。IDLではなくAIDL(Android Interface Definition Language)形式のインターフェイスを記述する。

Content Provider

・Androidではセキュリティーのために別のアプリケーションが記録したデータを書き換えることができないが、読み取ることはできる。アプリケーションのデータをどのように別アプリケーションに渡すかを決めるのが Content Provider。

データストレージ

各アプリケーションが読み書き可能な領域は /data/data/アプリ名/*****/ データストレージの種類:Preferences, Files, Databases(SQLite), Content Providers(別アプリケーションデータ), Network

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <string name="hello">Hello World, TheActivity!</string>
  <string name="app_name">Fernweh8000</string> <!-- アプリケーション名 -->
  <dimen name="dimen_px">10px</dimen>
  <dimen name="dimen_pt">20pt</dimen>
  <dimen name="dimen_mm">30mm</dimen>
  <dimen name="dimen_in">40in</dimen>
  <dimen name="dimen_dp">50dp</dimen>
  <dimen name="dimen_sp">60sp</dimen>
  <color name="color_rbg">#abc</color>
  <color name="color_rrbbgg">#aabbcc</color>
  <color name="color_arbg">#1234</color>
  <color name="color_aarrbbgg">#11223344</color>
</resources>
  • SDKにサンプルプログラム入ってるから読むといいことがあるかもしれない

Android Application Design Philosophy - Writing Efficient Android Code

  • GCが走るのでオブジェクトの生成を避ける
  • できるだけネイティブメソッドを利用する (Androidのライブラリで実装されているメソッドはJavaではなくC++で高速である
  • インターフェイスよりも静的メソッドを用いる
  • 仮想メソッドよりも静的メソッドを用いる
  • クラス内でget() / set() の利用を避ける
  • オブジェクトのメンバ変数はローカル変数へキャッシュして参照させる。 クラスのメンバ変数にアクセスするより、ローカル変数にアクセスする方が早いため、一度ローカル変数に置き換える

  • 定数はFinalで定義する

  • foreachのようなループ関数で注意が必要(配列のループは効果を発揮するが、繰り返し利用可能なオブジェクトに行うと、追加オブジェクトが必要となり処理が遅くなる)

  • Enumは避けること

  • クラス内部に定義するクラスにはパッケージスコープを定義する

  • float型は避ける

Verbose 冗長なメッセージ Debug デバッグのためのメッセージ Info 情報のためのメッセージ Warn 警告のためのメッセージ Error エラーメッセージ Fatal 致命的なエラー Slilent すべての出力の動作停止

エミュレータ Dev Tools

  • Development Setting
    • Debug app: デバッグをするアプリを指定。 ブレークポイントを長時間張っている間に飛んでくるエラーを防げる。デバッグが有効になるまでアプリケーションの起動を待たせる、Wait Debuggerオプションが利用できるようになる。
    • Wait for debugger: デバッガが有効になるまでアプリを停止。Activityの起動処理デバッグに有効 Immediately destroy activities Activityがメモリ不足などで停止したら直ちに、システムに対して「Activityを破壊する」よう通知するオプション。これは「onFreeze(Bundle) / onCreate(android.os.Bundle)」パスのテストに有効
    • Show screen updates: 画面で更新がかかった領域をピンク色で通知させるオプション。不必要な画面更新(画面フラッシュ)が発生しているかどうか確認するために有効な確認です。
    • Show CPU usage: CPUメータを画面上部に表示。赤色のバーは全体的なCPU不可を、緑色の下側のバーは画面更新のために使われたCPU時間を示します
    • Show background: 表示するActivityがない場合、バックグラウンドのパターンを表示します

Androidのアーキテクチャ

Applications

一番上位のアーキテクチャ。

Linux Kernel

最下層のアーキテクチャ。Linaxのコアシステムサービスのみが使われている。

Android Runtime

  • Core Libraries
  • Dalvik Virtual Machine

Libraries

  • Surface Manager
  • OpenGL/ES
  • SGL
  • MediaFramework
  • FreeType
  • SSL
  • SQLite
  • Webkit
  • libc

Application Framework

  • Activity Manager
  • Window Manager
  • Content Providers
  • View System
  • Notification Manager
  • Package Manager
  • Resource Manager
  • Location zmanager
  • XMPP Service

Applications

ユーザーが実際に触れるアプリ

  • iPhone と Android の違い¥iPhone¥Android 
  • ボタン¥ホームボタンだけ¥ホームと戻るボタン。検索ボタンがあることも。 
  • ディスプレイ¥iPhone 3G/3GS 3.5inch 320x480

iPhone4 3.5inch 640x960px

iPad 768x1024¥端末によっていろいろ。WXGA800が多め?  - ブラウザ¥フラッシュが使えない¥一部の機種を除いて2.1以前のものは使えない  - ホーム画面の概念の違い¥¥  - ウィジェット¥無し¥有り  - ライブ壁紙 - 容量とデータ保存先¥本体のみ¥本体+SDカード

アプリはSDカードに入れられる方が好まれる  - アプリの審査¥iOSはAppleチームが審査。審査の期間は1週間以内…というりょい2~3週間¥後審査で緩い - 有料アプリの返品¥基本なし¥Android Marketでは購入後15分以内ならばOK

ぐぐれ

ぐぐれ

Share