2013年9月11日水曜日

AndroidのActivityはどのように書くのがよいのか

AndroidのアプリケーションをJavaで書くと、いろいろなコールバックのメソッドがいろいろなクラスに散らばってしまいます。
このため、いろいろなクラスがActivityのコンテキストを持ってしまい、メモリ使用量が増えるという欠点があります。
特に、Activityは専用のクラスを作らないといけなかったりひとつのクラスで二つのActivityを管理できないとかいろいろ不便。
そこで他の人はどうしているのかを調べてみました。

GoogleのChromeブラウザのソースをみると、いろいろなイベントはインナークラスで受けて、アウタークラスに処理を委譲しています。
Activitをインナークラスで作ってデリゲートのように使えば、一つのクラスで複数のActivityを管理できるますし、他のイベントも同じような仕組みでいろいろ受けられます。
インナークラスに処理を書くのか、アウタークラスに処理を書くのかは好みの問題ですが、コンテキストもいろいろなクラスに渡さなくてすむので、全体としてきれいにかけそうな気がします。







------------------------------
SomeMain.java
------------------------------
package com.yomei;

import java.io.*;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;

public class SomeMain {

static Handler handler = new Handler();
static Activity activity = null;

public static void onCreate()
{
}

public static void onDestroy()
{
}

//Activityのイベントを受け取るデリゲート
public static class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState){
    activity=this;    super.onCreate(savedInstanceState);
    SomeMain.onCreate();//Outerクラスに委譲
}
@Override
protected void onDestroy() {
    SomeMain.onDestroy();//Outerクラスに委譲
    activity=null;
}

}


------------------------------
AndroidManifest.xml
------------------------------

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.yomei"
      android:versionCode="1"
      android:versionName="1.0">
    <application >
        <activity android:name="com.yomeiSomeMain$MainActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

0 件のコメント:

コメントを投稿