アンドロイド開発のメモ

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

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

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

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

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

  • ExceptionThrowable をキャッチしない。
  • 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.xmlapplication ブロックに書く。

Acticity

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

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

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

  • ライフサイクル:インスタンスなし・Invisible・Visible・Forground
  • View:画面の構成要素、画面部品
  • Viewgroup
  • アダプタービュー
  • テーマ <application android:theme="@android:style/Theme.Dark">

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

Intent Receiver

  • IntentActivity または IntentReceiver に投げられる
  • Intent Receiver は画面に依存しない処理をバックグラウンドで行う
  • NotificationNotification 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

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

  • iPhoneAndroid の違い
  • ボタン/ホームボタンだけ/ホームと戻るボタン。検索ボタンがあることも。 
  • ディスプレイ/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