Android开发规范

Android 开发规范(完结版),安卓面试题生命周期 接口(interface):命名规则与类一样采用大驼峰命名法,多以 able 或 ible 结尾,如。注意:如果项目采用 MVP,所有 Model、View、Presenter 的接口都以 I 为前缀,不加后缀,其他的接口采用上述命名规则。 阅读详情
原文地址: http://jingyan.baidu.com/article/948f592443fd30d80ff5f9b6.html
看着不是很爽,填点注释吧
Android开发规范是本文要介绍的内容,主要是来了解并学习Android开发中一些细节的内容,具体关于Android开发规范内容的详解来看本文。

一、Android开发编码规范

1、java代码中不出现中文,最多注释中可以出现中文 //Java中变量名是可以使用中文甚至任意字符的,但不建议这样用。一般使用驼峰法

2、局部变量命名、静态成员变量命名:只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 //驼峰法aGoodBady

3、常量命名:只能包含字母和_,字母全部大写,单词之间用_隔开//A_GOOD_BADY

4、layout中的id命名

命名模式为:view缩写_模块名称_view的逻辑名称

view的缩写详情如下

LayoutView:lv RelativeView:rv TextView:tv ImageView:iv ImageButton:im Button:btn 5、activity中的view变量命名

命名模式为:逻辑名称+view缩写

建议:如果layout文件很复杂,建议将layout分成多个模块,每个模块定义一个moduleViewHolder,其成员变量包含所属view

6、strings.xml中的id命名

命名模式:activity名称_功能模块名称_逻辑名称/activity名称_逻辑名称/common_逻辑名称

strings.xml中,使用activity名称注释,将文件内容区分开来

drawable中的图片命名

命名模式:activity名称_逻辑名称/common_逻辑名称

7、styles.xml:将layout中不断重现的style提炼出通用的style通用组件,放到styles.xml中;

8、使用layer-list和selector

9、图片尽量分拆成多个可重用的图片

10、服务端可以实现的,就不要放在客户端

11、引用第三方库要慎重,避免应用大容量的第三方库,导致客户端包非常大

12、处理应用全局异常和错误,将错误以邮件的形式发送给服务端

13、图片的.9处理

14、使用静态变量方式实现界面间共享要慎重

15、Log(系统名称模块名称接口名称,详细描述)

16、单元测试(逻辑测试、界面测试)

17、不要重用父类的handler,对应一个类的handler也不应该让其子类用到,否则会导致message.what冲突

18、activity中在一个View.OnClickListener中处理所有的逻辑

19、strings.xml中使用%1$s实现字符串的通配

20、如果多个Activity中包含共同的UI处理,那么可以提炼一个CommonActivity,把通用部分叫由它来处理,其他activity只要继承它即可

21.使用button+activitgroup实现tab效果时,使用Button.setSelected(true),确保按钮处于选择状态,并使activitygroup的当前activity与该button对应

22、如果所开发的为通用组件,为避免冲突,将drawable/layout/menu/values目录下的文件名增加前缀

23、数据一定要效验,例如

字符型转数字型,如果转换失败一定要有缺省值;

Android开发服务端响应数据是否有效判断;

二、Android开发性能优化

1、http用gzip压缩,设置连接超时时间和响应超时时间

http请求按照业务需求,分为是否可以缓存和不可缓存,那么在无网络的环境中,仍然通过缓存的httpresponse浏览部分数据,实现离线阅读。

2、listview性能优化

(1)复用convertView

在getItemView中,判断convertView是否为空,如果不为空,可复用。如果couvertview中的view需要添加listerner,代码一定要在if(convertView==null){}之外。

(2)异步加载图片

item中如果包含有webimage,那么最好异步加载

(3)快速滑动时不显示图片

当快速滑动列表时(SCROLL_STATE_FLING),item中的图片或获取需要消耗资源的view,可以不显示出来;而处于其他两种状态(SCROLL_STATE_IDLE和SCROLL_STATE_TOUCH_SCROLL),则将那些view显示出来

3、使用线程池,分为核心线程池和普通线程池,下载图片等耗时任务放置在普通线程池,避免耗时任务阻塞线程池后,导致所有异步任务都必须等待

4、异步任务,分为核心任务和普通任务,只有核心任务中出现的系统级错误才会报错,异步任务的ui操作需要判断原activity是否处于激活状态

5、尽量避免static成员变量引用资源耗费过多的实例,比如Context

6、使用WeakReference代替强引用,弱引用可以让您保持对对象的引用,同时允许GC在必要时释放对象,回收内存。对于那些创建便宜但耗费大量内存的对象,即希望保持该对象,又要在应用程序需要时使用,同时希望GC必要时回收时,可以考虑使用弱引用。

7、超级大胖子Bitmap

及时的销毁(Activity的onDestroy时将bitmap回收,在被UI组件使用后马上进行回收会抛RuntimeException:Canvas:tryingtousearecycledbitmapandroid.graphics.Bitmap)设置一定的采样率(有开发者提供的图片无需进行采样,对于有用户上传或第三方的大小不可控图片,可进行采样减少图片所占的内存),从服务端返回图片,建议同时反馈图片的size巧妙的运用软引用drawable对应resid的资源,bitmap对应其他资源任何类型的图片,如果获取不到(例如文件不存在,或者读取文件时跑OutOfMemory异常),应该有对应的默认图片(默认图片放在在apk中,通过resid获取);

8、保证Cursor占用的内存被及时的释放掉,而不是等待GC来处理。并且Android明显是倾向于编程者手动的将Cursorclose掉

9、线程也是造成内存泄露的一个重要的源头。线程产生内存泄露的主要原因在于线程生命周期的不可控

10、如果ImageView的图片是来自网络,进行异步加载

11、应用开发中自定义View的时候,交互部分,千万不要写成线程不断刷新界面显示,而是根据TouchListener事件主动触发界面的更新

12、Drawable

ui组件需要用到的图片是apk包自带的,那么一律用setImageResource或者setBackgroundResource,而不要根据resourceid

注意:get(getResources(),R.drawable.btn_achievement_normal)该方法通过resid转换为drawable,需要考虑回收的问题,如果drawable是对象私有对象,在对象销毁前是肯定不会释放内存的。

三、Android开发UI 优化

1、layout组件化,尽量使用merge及include复用

2、使用styles,复用样式定义

3、软键盘的弹出控制,不要让其覆盖输入框

4、数字、字母和汉字混排占位问题:将数字和字母全角化。由于现在大多数情况下我们的输入都是半角,所以字母和数字的占位无法确定,但是一旦全角化之后,数字、字母的占位就和一个汉字的占位相同了,这样就可以避免由于占位导致的排版问题。

5、英文文档排版:textview自动换行时要保持单词的完整性,解决方案是计算字符串长度,然后手动设定每一行显示多少个字母并加上‘\n‘

6、复杂布局使用RelativeLayout

7、自适应屏幕,使用dp替代pix

8、使用android:layout_weight或者TableLayout制作等分布局

9、使用animation-list制作动画效果

注意事项

Android开发初学者必看文档:Android开发规范的内容介绍完了,希望通过Android开发内容的学习能对你有所帮助,如果想要了解更多的Android开发,请参考编辑推荐的文章。

参考资料

http://www.xasxt.com/index.php/article/java/zixun_6941.html
Android模块化设计之组件开发规范 目前只能想起这么多,以后有新增的会继续补充。规范好定制,落实起来却难,路漫漫其修远兮,加油吧,打工人! 阅读详情

相关推荐

在win10系统上安装opnet14.5注意事项和步聚

opnet 14.5安装避坑!

miracle_eicont的专栏 1037

Android开发初学者必看文档:Android开发规范

Android开发规范是本文要介绍的内容,主要是来了解并学习Android开发中一些细节的内容,具体关于Android开发规范内容的详解来看本文。 一、Android开发编码规范 1、java代码中不出现中文,最多注释中可以出现中文 2、局部变量命名、静态成员变量命名 只能包含字母,单词首字母出第一个外,都为大写,其他字母都为小写 3、常量命名 只能包含字母和_,字母全部大写,单词之间

1030

【Linux内核】Linux内核裁剪完全指南:从理论到实战的系统优化

在嵌入式设备、专用服务器和物联网系统日益普及的今天,如何让Linux系统在资源受限的环境中高效运行成为开发者必须面对的问题。Linux内核裁剪正是解决这一问题的关键技术,它通过移除不必要的内核组件,打造出更精简、更安全、更高效的自定义操作系统。本文将系统全面地介绍Linux内核裁剪的完整流程和实用技巧,帮助您掌握这一核心技能。Linux内核裁剪是一项结合技术知识与实践经验的系统工程。明确需求:裁剪前必须清晰了解目标系统的硬件配置和功能需求。循序渐进:采取小步修改、反复测试的策略,避免一次性大幅修改。

撬动未来的支点的专栏 1388

layout基本缩写

一:验证缩写 1:DRC—design rule check (设计规则验证) 2:lVS—layout versus schematic(电气连接验证) 3:ERC— Electrical rule check(电气规则验证) 二:文件缩写 1:TLR—Topological layout rules(拓扑布局规则)剖面图规则 2:MTT:Mask tooling table(掩膜版生成工具)mask计算方法 3:EDR—Electrical design rule (电气设计规则) ...

qq_66408401的博客 1675

zabbix监控深信服下一代防火墙配置

深信服下一代防火墙v8.0管理界面,zabbix,SNMP

weixin_43996471的博客 6873

基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例

本文实验采用公共数据集Ninapro。该数据集数据量大,采集的动作丰富,每个单位数据集里面包括表面肌电信号、加速度计、手部运动学和动态数据等,记录了67名完整受试者和11名进行了至少50 次手部运动的截肢者的数据。NinaproDB1数据集包括27名完整的受试者(7 名女性和20名男性,其中2个左手和25 个右手) 的肌电信号。信号采集频率为100Hz。

树下一朵云的博客 2295

Android UI 基础知识

01Android UI 1.1UI 用户界面(User Interface,简称 UI,亦称使用者界面)是系统和用户之间进行交互和信息交换 的媒介,它实现信息的内部形式与人类可以接受形式之间的转换。 软件设计可分为两个部分:编码设计与UI设计。 1.2 Android UI Android应用界面包含用户可查看并与之交互的所有内容。Android 提供丰富多样的预置 UI 组 件,例如结构化布局对象和 UI 控件,您可以利用这些组件为您的应用构建图形界面。Android 还 提供其他界面模块,用于构

清晨的博客 5058

model_optimizer将pi05端到端延时进一步优化到68.13ms了

目前在保持灵活性和性能之间找到一个较好的平衡。vit, llm仍然使用onnx->trt_engine的路径,量化可以通过https://github.com/NVIDIA/Model-Optimizer.git支持。同时支持通过cutedsl手写算子进行进一步优化denoise因为步数多,kernel launch多,因此完全通过手写融合算子实现,将所有steps进行一次大的cuda graph capture.

happyAnger6的专栏 59

Android基础教程(非常详细)从零基础入门到精通,看完这一篇就够了

网络安全行业产业以来,随即新增加了几十个网络安全行业岗位︰网络安全专家、网络安全分析师、安全咨询师、网络安全工程师、安全架构师、安全运维工程师、渗透工程师、信息安全管理员、数据安全工程师、网络安全运营工程师、网络安全应急响应工程师、数据鉴定师、网络安全产品经理、网络安全服务工程师、网络安全培训师、网络安全审计员、威胁情报分析工程师、灾难恢复专业人员、实战攻防专业人员…就算用户知道,去设置界面找到权限开关也颇费周折。打开手机的系统设置界面,进入到具体应用的管理页面,会发现该应用的存储访问权限被禁止了。

Python_0011的博客 3万+

C/C++炫酷烟花①(完整代码)

C/C++实现炫酷烟花动画的完整代码。

AIGC 2万+

SAP-ABAP: BP主数据完全指南:从基础到高阶应用

SAP-ABAP: BP主数据完全指南:从基础到高阶应用

baidu_35680696的博客 1647

Android 开发入门文档

Activity:Android 应用的界面单元,负责用户交互和数据展示。Intent:用于在不同组件之间传递消息和数据。Service:在后台执行长时间运行的任务。Broadcast Receiver:接收系统广播和应用内广播。Content Provider:用于数据共享和访问。Fragment:独立的用户界面模块。线性布局(LinearLayout):按照水平或垂直方向排列子视图。相对布局(RelativeLayout):根据视图之间的相对关系排列子视图。

baidu_33393680的博客 1937

71、聚二甲基硅氧烷(PDMS)材料模型验证研究

本研究通过实验与数值模拟相结合的方法,系统探究了聚二甲基硅氧烷(PDMS)的力学性能与粘附行为。重点验证了多种超弹性材料模型在不同剥离速率下的适用性,结果表明Ogden N2模型在预测界面韧性和平均剥离力方面误差最小,表现最优。研究涵盖了PDMS的合成、单轴拉伸试验、剥离测试及有限元分析,为PDMS在机械与摩擦学领域的应用提供了可靠的建模依据,并建议在后续模拟中优先采用Ogden模型。

wine的专栏 1053

Android开发规范及注意事项

本文档用于指导开发人员在安卓项目开发过程中类名、资源文件名、变量名等开发约定以及命名规范,方便工程的后期维护,提高代码整体质量、可读性。

佳乐的博客 2096

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Android安卓开发规范(完整版)

摘要1 前言2 AS 规范3 命名规范4 代码样式规范5 资源文件规范6 版本统一规范7 第三方库规范8 注释规范9 测试规范10 其他的一些规范1 前言为了有利于项目维护、增强代码可读性、提升 Code Review 效率以及规范团队安卓开发,故提出以下安卓开发规范,该规范结合本人多年的开发经验并吸取多家之精华,可谓是本人的呕心沥血之作,称其为当前最完善的安卓开发规范一点也不为过,如有更好建议,...

timekeeper 1233

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android 开发规范(完结版)

摘要 1 前言 2 AS 规范 3 命名规范 4 代码样式规范 5 资源文件规范 6 版本统一规范 7 第三方库规范 8 注释规范 9 测试规范 10 其他的一些规范 1 前言 为了有利于项目维护、增强代码可读性、提升 Code Review 效率以及规范团队安卓开发,故提出以下安卓开发规范,该规范结合本人多年的开发经验并吸取多家之精华,可谓是本人的呕心沥血之作,称其为当...

wusj的博客 1520

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

安卓开发规范

安卓开发规范摘要 1 前言 2 AS规范 3 命名规范 4 资源文件规范 5 版本统一规范 6 第三方库规范 7 注释规范 8 测试规范 9 方法排序规范 10 其他的一些规范 为了利于项目维护以及规范开发,促进成员之间Code Review的效率,故提出以下开发规范,如有更好建议,请务必及时反馈!方便他人,提高自己

feisher 692

android开发编程规范,Android编程开发规范

Android编程开发规范一.约定Activity.onCreate(),Fragment.onActivityCreated(),作为程序入口,不用写入太多代码,尽量保持只调用initXXX()方法,简单明了展示调用过程。如:initData(),initView()。单个方法体不要过长代码任何地方不要拼错单词杜绝整个类代码格式化调用方法保持“临近原则”,被调用的方法,放在调用方法下方统一调整I...

weixin_28904055的博客 282

安卓开发规范-必读版

安卓开发规范 工欲善其事必先利其器,工欲利其器必先建其模,细节决定成败,请完善你的小细节 本文转自Blankj: https://github.com/Blankj/AndroidStandardDevelop 摘要 1 前言2 AS规范3 命名规范4 资源文件规范5 版本统一规范6 第三方库规范7 注释规范8 测试规范9 RN规范10 其他的一些规范 1 前言 为

风离紫竹zhangqiang的博客 975

Android 开发规范

Android 开发规范(updating) 阅读 5203 收藏 621 2017-03-08 原文链接:github.com 安卓开发规范(updating) 摘要 前言AS规范命名规范资源文件规范版本统一规范第三方库规范注释规范测试规范RN规范其他的一些规范 前言 为了利于项目维护以及规范开发,促进成员之间Code Review的效率,故

hyb1234hi的专栏 303

ANDROID 开发规范总结

http://blog.youkuaiyun.com/beyond0525/article/details/44835651 http://blog.youkuaiyun.com/beyond0525/article/details/44835651 http://blog.youkuaiyun.com/beyond0525/article/details/44835651 http://blog.youkuaiyun.com/beyon

574
上一篇: 强引用 软引用 若引用 虚引用:详解区别
下一篇: android 线程
小小土豆
博客等级 码龄18年 10粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值