网站首页 > 教程文章 正文
近两年,Android 开发可以说是越来越容易了,在很多前辈的努力下,Android 开发生态圈里构建出了很多非常好的轮子(开发库或框架)。在开发中,有时都面对这么多轮子都有选择困难症了。面对炫彩的开发库和很流行的框架,我们该如何选择呢?
1、GitHub Star 数判断标准,GitHub Star 数越多,证明这个轮子使用的人数比较多,一般以 1 k 起为判断标准;
如图,搜索 “Android” ,选择排序为 “Most Stars”,这样搜索结果就会按照 Star 数最多的排在首页。
2、综合分析项目,整体考虑。从项目应用场景、开发人员、公司情况、项目后期维护等方面分析,选择合适项目的开发框架或开发库是最好的选择,不要认为哪个开发框架流行用哪个,项目开发中稳定是大前提;
3、仔细查看开源框架源码,多看开源框架的 Issues,从 Issues 提前预判框架在项目开发中可能会出现的问题,慎重选择每一个开源框架,是一个程序员应该必备的精神。
在 Android 开发中,一般都是从以上3个方面选择开源框架搭建Android 项目。Android 项目开发中,开源框架一般可以分为网络、组件以及其它工具类组成,下面我分别介绍几个比较优秀的开源框架。
1、网络框架
常用的 Android 开发网络请求库有
Retrofit https://github.com/square/retrofit
OkHttp https://github.com/square/okhttp
Volley https://github.com/google/volley
目前用的最多的也就 Retrofit 和 OkHttp ,Volley 基本上是很少有人用吧,前两个都是 Square 公司开源的,很厉害吧!Volley 是Google 早年开源的,目前基本被淘汰。
这里简单介绍下 Retrofit
Retrofit 是一个RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而Retrofit 仅负责网络请求接口的封装。
示例如下:
(1)、创建一个接口
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
(2)、实现接口
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
(3)、调用
Call<List<Repo>> repos = service.listRepos("octocat");
如需详细了解 Retrofit ,请访问 https://square.github.io/retrofit/,这里有非常详细的开发文档。
2、组件库
Android 开发的组件库有很多,如 BasePopup、RxUI、SmartRefreshLayout等
BasePopup:https://github.com/razerdp/BasePopup,是一款针对系统PopupWindow优化的Popup库,功能强大,支持背景模糊,常用在应用中弹框场景。
RxUI:RxUI 是 RxTool 下的一个分支, RxTool 是 Android 开发过程经常需要用到各式各样的工具类集合。很强,试试呗 https://github.com/Tamsiree/RxTool 。
SmartRefreshLayout:Android 开发中必备的下拉刷新、上拉加载库,很好用,目前 Github Star数已有 20k 了,赶紧上手 ,https://github.com/scwang90/SmartRefreshLayout
3、工具,提升开发效率、维护代码利器
Butter Knife ,俗称黄油刀,Android 开发必备,将 Butter Knife 引入项目,将会节省不少开发时间,避免了开发者 通过多次 findViewById(), 目前最新版本已是 10.2.1 了,这是 GitHub 链接https://github.com/JakeWharton/butterknife
示例
class ExampleActivity extends Activity {
@BindString(R.string.title) String title;
@BindDrawable(R.drawable.graphic) Drawable graphic;
@BindColor(R.color.red) int red; // int or ColorStateList field
@BindDimen(R.dimen.spacer) float spacer; // int (for pixel size) or float (for exact value) field
// ...
}
ViewHolder 里使用
public class MyAdapter extends BaseAdapter {
@Override public View getView(int position, View view, ViewGroup parent) {
ViewHolder holder;
if (view != null) {
holder = (ViewHolder) view.getTag();
} else {
view = inflater.inflate(R.layout.whatever, parent, false);
holder = new ViewHolder(view);
view.setTag(holder);
}
holder.name.setText("John Doe");
// etc...
return view;
}
static class ViewHolder {
@BindView(R.id.title) TextView name;
@BindView(R.id.job_title) TextView jobTitle;
public ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
@OnClick(R.id.test)
public void onViewClick(View view){
}
@OnPageChange(R.id.viewPager)
public void onPageChange(int position){
}
ARouter ,ARouter 是国内阿里巴巴开源的框架,主要解决项目中耦合严重的问题,有了它,代码耦合问题再也不是难事了,项目中的业务可以根据实际需要分离成多个组件,使用 ARouter 为多个组件间的通信提供了保障。两个字描述,强大,三个字,很强大,详细了解请移步https://github.com/alibaba/ARouter
Arouter 初始化
if (isDebug()) { // 这两行必须写在init之前,否则这些配置在init过程中将无效
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
}
ARouter.init(mApplication); // 尽可能早,推荐在Application中初始化
添加 Activity 注解,这里需要注意,填写的路径(path)至少需要两级 如 “/test/activity ” ,不能少一个斜杠,不然会让你很懵逼的到处找错误都找不到。
// 在支持路由的页面上添加注解(必选)
// 这里的路径需要注意的是至少需要有两级,/xx/xx
@Route(path = "/test/activity")
public class YourActivity extend Activity {
...
}
从开源框架或开源库选择到搭建项目这个过程,会经历痛苦的抉择,选择了 A 开源框架,又选择了 B 开源框架,两个框架从项目的不同角度在协助着项目开发,最终发现两者竟然不兼容,或者大部分功能都是相同的,这就很难选择了......
最后我推荐一个 MVP 开发模式的框架,我认为他是GitHub 上 MVP 开发模式框架中比较优秀的了,让小白也能轻松上手,快速搭建项目,不用考虑项目各类框架选择,作者已经选好了
Android 开发中常用、必用的开发框架。他就是 MVPArms https://github.com/JessYanCoding/MVPArms。
作者提供了 Android Studio 开发工具插件,一键生成Activity和对应的 MVP 相关接口和实现类,避免了手动创建多个类的繁琐事项,开发文档写的非常精细。
开始学习吧!
封面图: Pixabay License
- 上一篇: Android 开发常用框架
- 下一篇: Android通用Dialog的封装
猜你喜欢
- 2024-12-05 SM新女团AI撞脸Lisa,出道物料被锤抄袭,改玩拿来主义?
- 2024-12-05 用GTK+来创建一个带界面的C语言程序之1——一个简单的窗口
- 2024-12-05 Android之自定义ListView(一)
- 2024-12-05 你知道iframe与frame的区别吗,最全面的解释来了
- 2024-12-05 大厂社招:Android 高级工程师的面试题,你知道多少?
- 2024-12-05 C# Windows Api User32.dll窗体和消息动态库详解
- 2024-12-05 Android通用Dialog的封装
- 2024-12-05 Android 开发常用框架
- 2024-12-05 电气自动化专业词汇中英文对照表
- 2024-12-05 Chrome插件从零开始开发指南(一)完成一个基础示例工程
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)