您的位置:首页 > 移动开发 > Android开发

Android 项目实践(五)——基础类和工具类的实现

2015-10-29 08:42 751 查看
  Android项目开发一般都是由团队来完成,一个团队能够顺利搭配合作,完成一个优秀的项目,少不了良好的编码习惯。这里的编码习惯不单单是指命名规则等基础,还包括基础类BaseApplication,BaseFragment,BaseActivity的定义,工具包工具类的搭建等。

  

  下面我们就讲一下命名规则,基础类,工具类的实现和搭建。

命名规则

  在Java《Java的命名规范 》博客中我们也讲过命名规则了,Android使用Java编写,命名规则当然是相同的:

包名:全部字母小写。不允许包含下滑线。

类名和接口名:首字母大写, 多单词首字母大写。

变量名和方法名:首字母小写。多单词第一个单词首字母小写, 其余单词首字母大写。

常量名: 单词全部大写, 多单词中间用下划线隔开。

成员变量:一般为“mData”。小写”m”+字母单词首字母大写。

局部变量:首字母小写。多单词第一个单词首字母小写, 其余单词首字母大写。

  在命名过程中,尽量不要出现字母拼写出错,使用缩写等情况,命名尽量完整,可以让别人在名称上获得更多信息。

基础类

BaseApplication

  一般情况下在开发的过程中,我们会定义一个BaseApplication继承Application,然后在AndroidManifest中进行如下更改:

<application
android:name=".BaseApplication"<!--【此处注释不正确】 将"name"值更改为自定义的"BaseApplication"类。-->
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
</application>


  BaseApplication中,我们一般做如下定义:

public class BaseApplication extends Application {

private static String mLock = "LOCK";
private static BaseApplication mApplication;
private BaseApplication() {
}
public static BaseApplication newInstance(){
if(mApplication!==null){
synchronized(mLock ){
if(mApplication!==null){
mApplication = new BaseApplication();
}
}
}
return mApplication;
}
/**
* 获取Context
* @return 返回Context的对象
*/
public static Context getContext(){
return mApplication.getApplicationContext();
}

@Override
public void onCreate() {
super.onCreate();
this.mApplication = this;
/*
*做一些初始化的处理:初始化数据库,化图片缓存,初始化地图等
*/
}
}


Point One:

定义BaseApplication的作用是:

  在启动这个应用程序时,首先运行在AndroidManifest中注册的Application,也就是”name“的值代表的Application。在初始运行这个应用时我们需要先加载一些数据或其他,做一些初始化的操作,这时,我们就需要在BaseApplication中定义。(其实将应用的Application定义为BaseApplication这个名字也不太合适,可能定义为MyApplication更加合适点,这里我们暂且使用BaseApplication)。

Point Two:

  在BaseApplication这个类中,我们定义了获得Application Context的一个方法,这里原因有二:

    

(1)内存优化。 Application和Android四大组件都持有一个Contex对象。网络连接,数据库,UI设计等很多地方都会用到Context对象,但是Context对象的持有会使得Activity,Service等一直存在于内存中,占消耗内存。所以在使用Context时,应该尽量使用Application的Context。当然,象Dialog等必须依赖于Activity的Context时,我们就不得不使用了。

(2)使用方便。有时候,我们经常会碰到在类中需要使用一个Context对象,但是这个类,又不是四大组件,不包含Context。这时,我们可能就想通过构造器传入一个Context对象,比较麻烦。我们可以直接定义一个静态的方法获取Application的 Context,这样减少了Activity的Context的持有,还优化了内存。

BaseActivity

  BaseActivity的使用与BaseApplication的使用时如出一辙的。之前我们在《如何知晓当前界面是哪个活Activity? 》这篇博客中就使用到了BaseActivity。在实际开发中的使用也是很相似的。BaseActivity主要也是做一些数据的存储,初始化等。这里不再列举代码。然后在使用Activity时,继承BaseActivity。

BaseFragment

  BaseFragment也是,BaseFragment继承Fragment,然后在使用Fragment时,继承BaseFragment。

工具类

  在我们开发的过程中,难免要使用一些工具,例如:网络状态获取,dp转px尺寸转换,获取Uri路径,压缩图片等工具。我们一般会将这些工具分别封装为类,然后放在一个”utils”的package中。这样我们在使用这使用工具时可直接调用使用,不必在在自己的类中反复的定义,即简化了代码,还提高了效率。

这里简单的列举几个工具类:

Uri工具:

public class UriUtils {
/**
* 获取Uri的真实地址
* @param uri 要进行转化的Uri对象
* @return Uri指向的文件File对象。
*/
public static File getFilePath(BaseActivity activity,Uri uri) {
String[] proj = {MediaStore.Images.Media.DATA};
Cursor actualimagecursor = activity.managedQuery(uri, proj, null, null, null);
int actual_image_column_index = actualimagecursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualimagecursor.moveToFirst();
String img_path = actualimagecursor.getString(actual_image_column_index);
return new File(img_path);
}
}


Toast工具:

public class ToastUtils {
/**
* 弹出Toast方法
* @param content Toast展示的内容。
*/
public static void showToast(String content){
Toast.makeText(BaseApplication.getContext(), content, Toast.LENGTH_SHORT).show();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: