はじめてのAndroid開発

     2011/12/08 井谷裕紀
はじめに
 今回、環境構築の話はしません。
 環境構築はここを見れば大丈夫!
http://www.android-
group.jp/index.php?%A5%EF%A1%BC%A5%AD%A5
%F3%A5%B0%A5%B0%A5%EB%A1%BC%A5%D7
%2F%A5%CF%A5%F3%A5%BA%A5%AA%A5%F3%
A5%BB%A5%C3%A5%B7%A5%E7%A5%F3
みなさん
Androidは好きですか?
愚問でしたね。
そんなAndroid大好きなみなさん
Androidと言えば
なにを思い浮かべますか?
愚問でしたね。
機種依存
というわけで
まずは機種依存の話から
そのためには、
Androidのディレクトリ構成を
 理解する必要があります。
0 ディレクトリ構成

              プログラムファイル

               自動生成ファイル

                 Google API




             リソース(xml, 画像, etc.)




             アプリケーションを定義するファイル
1. 機種依存
1-1 よくある機種依存
   解像度、dpi
   カメラ
   メール
   etc.



      今回はまったの
      が、、、、、
1-2-1 端末による解像度・dpiの違い
   Androidは端末によって解像度やdpiが違います
                     ※dpi = dot per inchの略。ピクセル解像度。
       800x480
       960x540
       854x480
       480x320
       etc.




    端末ごとの違いをどう吸収するか。
    もっとも影響を受けるのはレイアウトで
    す。
1-2-2 解像度・dpi別のリソースの管理

   異なる解像度・dpiを吸収するためのもっともシンプ
    ルな方法は、それら毎に画像等のリソースを管理す
    ることです。

   Androidには、複数のリソースを用意することで、そ
    の端末のdpiや解像度に合った適切なリソースを自動
    で読み込む仕組みがあります。
1-2-3 具体的な方法
           res/drawable-ldpi      100〜140dpi
          res/drawable-mdpi       140〜180dpi
           res/drawable-hdpi      190〜250dpi
          res/drawable-nodpi   DPIに依存しない画像


                      さらに応用すると・・・


            res/drawable-320dpi      320dpi
              res/drawble-hdpi-    190〜250dpi
                  800x480         解像度:800x480
              res/drawble-hdpi-    190〜250dpi
                  854x480         解像度:854x480
              res/drawble-hdpi-    190〜250dpi
                  960x540         解像度:960x540
あるAndroiderは言いました。
普通に書けば、
機種依存問題なんてまず起こらない。
    ただしカメラ以外。
Androidには機種依存を吸収する仕組みが
      ちゃんと用意されています。
    その使い方さえ押さえておけば、
機種依存でそこまで深刻な問題は起きません。
ただし
カメラ以外。
2. Android4種の神器
2-1 Android4種の神器
   Activity
       ユーザー・インタフェース(UI)を持つAndroidのア
        プリケーション・プログラム
   Service
       UIを持たず,連続的に情報を提供し続けるプログラ
        ム
   BroadcastReciever
       外部のイベントに対して何らかの反応を返す
   ContentProvider
       データベースなど,特定の条件下においてデータを
        提供する
2-2-1 Activityとは
   主にViewのことを指します。
   Android上で表示されている画面はActivityです。




            Activity
2-2-2 Activityのライフサイクル


Activityには、生成から始
まり、破棄で終わるまでの
ライフサイクルがありま
す。
2-2-3 Activityを作成するには
   Activityクラスを継承し、onCreate()メソッドを
    Overrideします。
public class SampleActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState
    {
      super.onCreate(savedInstanceState);
      // ViewをLayoutを定義しているxmlからセット
      setContentView(R.layout.main);
    }
}
2-3-1 Serviceとは
   主にバックグラウンドで動作し続けるプログラムを
    指します。

   例)
       タイマー機能
       音楽再生
       目覚まし機能
       etc.
2-3-2 Serviceのライフサイクル

Serviceにもライフサイ
クルがあります。
2-3-3 ServiceのBind
   Serviceは通常、一度起動するとActivityからは停止す
    ることしかできません。
   Bindという機能を使うと、ActivityからServiceが提供
    するメソッドを実行することができます。
2-3-4 Serviceを作成するには
       Serviceクラスを継承し、onCreate(), onBind()を
        Overrideします。
    public class SampleService extends Service
    {
             public void onCreate()
             {
                     super.onCreate();
             }

          @Override
          public IBinder onBind(Intent arg0)
          {
            // bind機能は使用しないのでnullを返す
            return null;
          }
    }
2-4-1 BroadcastRecieverとは
   外部からのイベントに応じて処理が発生するプログ
    ラム
       電話が着信したときに何らかの処理を実行する
       端末を再起動した際に何らかの処理を実行する
       etc.
2-4-2 BroadcastRecieverを作成するには
   BroadcastRecieverクラスを継承し、onRecieve()を
    Overrideします。

    public class PgcwSampleReciever extends BroadcastReceiver
    {
             @Override
             public void onReceive(Context context, Intent intent)
             {
             }
    }
2-5 ContentProviderとは
   データを保存する際に使用します。
   端末内のアプリ専用エリアに作成され、アクセス権
    限を定義すれば他のアプリからも使用可能です。
   システムのデータもこれで作成されています。
3. Intent
3-1 Intentとは
   プロセスやスレッドを跨いだ処理を簡単に実現する
    ものです。
       Activityを起動
       Serviceを起動
       etc.
3-2 明示的Intentと暗黙的Intent
   明示的Intent
     直接起動したいClassを指定して呼び出す
    Intent intent = new Intent(context, class);
   暗黙的Intnent
     明示的に起動させるClassを指定せずにIntentのパラメー
      タに起動するClassをある程度推測できるだけの情報を入
      れておくと、該当するClassが呼び出される
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Uri.parse(“http://kayac.com”));
    startActivity(intent);
4. Out of memory
4-1 メモリとの戦い
   Android開発はメモリとの戦いと言っても過言ではあ
    りません。
   必ずと言っていいほど、メモリ問題にぶつかりま
    す。

                   そのほとんどの原因が・・・




             画像
4-2 メモリリーク
     Androidはメモリを明示的に開放することはできませ
      ん
      できないといういい方は正しくないかもしれません。
      メソッドは用意されているのですが、あてになりません。

                     どうするか



        来たるべきGCの時に備えて、
とにかく無駄に参照し続けるオブジェクトを持たないことです。
4-3 開発に入る前のポイント
   DEと相談しましょう
       画像を多用しなくてもリッチに見える工夫
       画像のダイエット処理
           画像をダイエットさせるだけで、とっても効果あります


   参考になるURL
       http://www.textdrop.net/soft/android-avoiding-memory-
        leaks/
       http://andbrowser.com/development/knowhow/65/eclipse-
        android-memory-leak-mat/
       http://tomokey.blogspot.com/2011/05/android.html
5. サンプルアプリの紹介
感想
   とってもよくできています。
   とっつきにくさは感じませんでした。
   JAVAを対して知らない僕でもそれなりに開発はでき
    ました!
Android楽しいよ!!
ご静聴ありがとうございました。

初めてのAndroid開発