1. 程式人生 > >在對Activity基類的封裝中,我做了什麽

在對Activity基類的封裝中,我做了什麽

例如 stream color tin ase throw this reset ack

在開發實踐中,不同Activity有很多代碼是反復冗余的。因此非常有必要將這部分抽取出來。封裝一個繼承自Activity的類,命名為BaseActivity。
翻看之前寫過的代碼,起初,BaseActivity只用來做了一個友盟統計,每一個Activity的onPause與onResume方法進行了重寫,基於此記錄了頁面使用的相關數據。代碼例如以下:

public class BaseActivity extends Activity {

	protected String Tag;
	protected Context mContext;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		Tag = this.getClass().getSimpleName();
		mContext = this;
	}

	@Override
	protected void onResume() {
		super.onResume();
		MobclickAgent.onResume(this);
	}
	
	@Override
	protected void onPause() {
		super.onPause();
		MobclickAgent.onPause(this);
	}
}
接下來發現,除了這個,還有非常多工作能夠放在BaseActivity中來做,節省大量的人力物力。

當中,Toast是很很常見的一個簡單提示控件。在學習後,最初是這樣使用的:

//須要進行顯示一個Toast
Toast.makeText(this, "Hello", Toast.LENGTH_SHORT).show();
後來發現每次寫太麻煩。不如將其封裝為一個工具類其中。其中借鑒各位大神的封裝模式:

public class T
{

	private T()
	{
		/* cannot be instantiated */
		throw new UnsupportedOperationException("cannot be instantiated");
	}

	public static boolean isShow = true;

	public static void showShort(Context context, CharSequence message)
	{
		if (isShow)
			Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
	}

	public static void showShort(Context context, int message)
	{
		if (isShow)
			Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
	}

	public static void showLong(Context context, CharSequence message)
	{
		if (isShow)
			Toast.makeText(context, message, Toast.LENGTH_LONG).show();
	}

	public static void showLong(Context context, int message)
	{
		if (isShow)
			Toast.makeText(context, message, Toast.LENGTH_LONG).show();
	}
	
}
每次使用時,能夠少些一個參數,顯示的時間略。

一段時間過後。將這個顯示Toast方法封裝在Activity中,是否會更加優雅,於是乎:

public class BaseActivity extends Activity {

      //...add new method
      protected void showShortToast(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

}

在繼承BaseActivity後,每次顯示Toast豈不是非常方便?

舉一反一,其它經常使用UI控件相同能夠進行封裝。



在有的項目中,使用了像UIL第三方的圖片載入庫。相同能夠進行封裝,也在一定程度降低了非常多代碼量,例如以下圖:

public class ImageLoaderBaseActivity extends BaseActivity {
	
	protected DisplayImageOptions options;
	protected ImageLoader imageLoader;

	protected void onCreate(Bundle savedInstanceState) {
		options = new DisplayImageOptions.Builder()
				.showImageOnLoading(R.drawable.bg_pic_loading)
				.showImageForEmptyUri(R.drawable.ic_launcher)
				.showImageOnFail(R.drawable.ic_launcher).cacheInMemory(true)
				.cacheOnDisc(true).considerExifParams(false)
				.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)
				.bitmapConfig(Bitmap.Config.RGB_565)
				.resetViewBeforeLoading(false)// 設置圖片在下載前是否重置,復位
				.build();// 構建完畢
		imageLoader = ImageLoader.getInstance();
		imageLoader.init(ImageLoaderConfiguration.createDefault(this));

	};
}

事實上,隱藏ActionBar也可放在BaseActivity裏面。

除此,還有好多。希望能起到拋磚引玉的作用,大家一起來討論!

博主新人,還請各位大神輕拍。




在對Activity基類的封裝中,我做了什麽