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();    }}

更多相关文章

  1. Python3原生编写月份计算工具
  2. 一款常用的 Squid 日志分析工具
  3. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android系统的性能调优参数介绍
  6. 基于Android搭建tensorflow lite,实现官网的Demo以及运行自定义t
  7. android 自定义View从基础到移动
  8. android--理解和使用自定义权限
  9. Flutter for Android开发详细配置开创建项目

随机推荐

  1. 网络界面Android 网络连接--Wifi/3G
  2. 什么组成了Android应用程序?
  3. build.gradle配置参数详解
  4. 每天学习一个Android中的常用框架——12.
  5. 关于MountService( 546): Waiting too lo
  6. Android中GridView的每行自动适应Adapter
  7. Android(安卓)官方自带的Edittext悬浮标
  8. Android界面布局的几种常用方式
  9. Android之View篇2————View的事件分发
  10. 深入Android【八】 —— Activity间数据