在对Activity基类的封装中,我做了什么

Posted cynchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在对Activity基类的封装中,我做了什么相关的知识,希望对你有一定的参考价值。

在开发实践中,不同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基类的封装中,我做了什么的主要内容,如果未能解决你的问题,请参考以下文章

Android当中的MVP模式View 层 Activity 的基类--- BaseMvpActivity 的封装

Android当中的MVP模式View 层 Activity 的基类--- BaseMvpActivity 的封装

MVP+Dagger2+Rxjava+Retrofit+GreenDao 开发的小应用,包括新闻图片视频3个大模块,代码封装良好

2017-06-26

Android:自定义BaseActivity基类

Android:自定义BaseActivity基类