上一篇文章 Just Enough Gradle for Android 介绍了Gradle的一些基本知识,基本概念,理解这些有助于我们更加合理地使用Gradle。这篇文章聚焦于Gradle在Android项目中的实际使用。之所以叫做多维度实例,是想展示Gradle运用的灵活性,对于同一种需求,尽可能尝试用多种方式去实现。比较各种实现之间的思路、方式及优劣。
Gradle的Android插件默认定义了两种BuildTypes:debug和release。我们往往需要对这两种BuildTypes进行区分。
为了使debug版本和release版本的APP能同时装到手机上,它们需要有不同的applicationId。
BuildType和ProductFlavor都可以设置自己的applicationId、minSdkVersion、targetSdkVersion、versionName等,如果没有设置,则使用defaultConfig中的设置。
如今debug版和release版的APP都装到我们的手机里了,但是它们俩看上去长得一模一样,无论是应用图标还是名称都一样,实在不容易区分。给不同版本的APP起不一样的名字也许是最简单明了的区分方式了。
之所以有不同的BuildType就是为了可以对它们进行差异化设置。Android资源(即res文件下面的内容)的差异化设置非常简单。在与main平级的目录下增加debug文件夹,在相应的资源文件夹下设置app_name即可:
我们甚至可以为不同版本的APP设置不一样的应用图标(以及其它一切资源),步骤跟修改app_name是一样的,把图标放置在相应文件夹里即可。如果仅仅是为了区分debug版和release版的话,确实没必要。不过对于不同的ProductFlavor还是有用的,的确不同的ProductFlavor可能会用不同的应用图标。一般而言,BuildType主要是内部使用,如debug或者测试什么的;而ProductFlavor主要是外部使用,发布不同版本的APP,如免费版和付费版等。
其实,在buildgradle中可以直接定义资源,跟我们在res/values中定义是一样的:
debug和release版的APP,一般需要设置不同的接口地址,方便测试使用。我们可以使用如下的方式实现:
BuildConfig类是项目构建过程中生成的,默认情况下DEBUG只在BuildType为debug的时候为true,其它情况下都为false。当然也可以设置:
我们通过BuildConfig的DEBUG字段去决定使用哪个URL,能不能在BuildConfig中增加字段呢?例如直接增加一个BASE_URL字段,这样岂不是更加直接。当然可以:
利用buildConfigField方法定义新的字段,注意最后一个参数的写法'" >
Android采用任务线(Task)的方式来管理Activity的实例。
在开发Android应用时,经常会涉及一些消耗大量系统内存的情况,例如视频播放、大量或者程序中开启多个Activity没有及时关闭等,会导致程序出现错误。为了避免这种问题,Google提供了一套完整的机制让开发人员控制 Android中的任务线。
Android系统中的任务线,类似于一个容器,用于管理所有的Activity实例。在存放Activity时,满足“先进后出 (First-In/Last-Out )"的原则。
但是使用任务线有以下缺点:
每开启一次页面都会在任务栈中添加一个Activity,而只有任务栈中的Activity全部清除出线时,任务线被销毁,程序才会退出。这样就造成了用户体验差, 需要点击多次返回才可以把程序退出。
每开启一次页面都会在任务栈中添加一个Activity还会造成数据冗余, 重复数据太多, 会导致内存溢出的问题(OOM)。为了解决任务栈产生的问题,Android为Activity设计了启动模式。
在实际开发中,应根据特定的需求为每个Activity指定恰当的启动模式。Activity的启动模式有4种,分别是standard、singleTop、singleTask和singlelnstance。在AndroidManifestxml中,通过<activity>标签的android:launchMode属性可以设置启动模式。
以上就是关于Android Gradle 多维度实例全部的内容,包括:Android Gradle 多维度实例、android中闹钟程序是怎样监听系统时间的、android采用什么方式管理activity实例等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)