日拱一卒(四)

1936 ワード

Activityベストプラクティス:
(1)現在のActivityを知る:
public class BaseActivity extends Activity {
		
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Log.d("BaseActivity", getClass().getSimpleName());
	}
	
}

これにより、現在実行されているActivityをログで判断できます.
(2)プログラムを随時終了する
アクティブマネージャとしてActivity Collectorクラスを新規作成します.コードは次のとおりです.
public class ActivityCollector {
	
	public static List<Activity> activities = new ArrayList<Activity>();

	public static void addActivity(Activity activity) {
		activities.add(activity);
	}

	public static void removeActivity(Activity activity) {
		activities.remove(activity);
	}

	public static void finishAll() {
		for (Activity activity : activities) {
			if (!activity.isFinishing()) {
				activity.finish();
			}
		}
	}

}

BaseActivityのonCreate()メソッドでActivity CollectorのaddActivity()メソッドを呼び出し、現在作成中のアクティビティをアクティビティマネージャに追加することを示します.その後、BaseActivityでonDestroy()メソッドを書き換え、Activity CollectorのremoveActivity()メソッドを呼び出し、すぐに破棄するアクティビティをアクティブマネージャから削除することを示します.
これからは、プログラムをどこで終了するかにかかわらず、Activity Collectorを呼び出すだけです.finishAll()メソッドでいいです.
(3)起動活動の最適化
SecondActivityは、それにジャンプするActivityパッケージにジャンプメソッドをカプセル化します.
public class SecondActivity extends BaseActivity {
	
	public static void actionStart(Context context, String data1, String data2) {
		Intent intent = new Intent(context, SecondActivity.class);
		intent.putExtra("param1", data1);
		intent.putExtra("param2", data2);
		context.startActivity(intent);
	}
	……
}

このように書くと、起動アクティビティのコードも簡略化され、次のように1行のコードでSecondActivityを起動できます.
button1.setOnClickListener(new OnClickListener() {
	@Override
	public void onClick(View v) {
		SecondActivity.actionStart(FirstActivity.this, "data1", "data2");
	}
});