Giter VIP home page Giter VIP logo

android-best-practices's Introduction

Android-Best-Practices

Join the chat Issue Stats

如果你也想参与或者是对文中内容有所补充,可以通过评论或邮件的方式进行告知,我很希望可以和大家一同完善本项目。

起笔时间2015年8月30日(晚)

目录

文章
2015 08 Log最佳实践
    09 Java反射最佳实践
      UI实时预览最佳实践
    10 Adapter最佳实践
2016 04 Selector最佳实践
    05 开发第三方库最佳实践
    06 集成第三方推送最佳实践
    07 打包提速最佳实践
    08 DataBinding最佳实践
    09 App瘦身最佳实践
    10 Gradle配置最佳实践
    11 第三方登录/分享最佳实践
2017 07 Dialog最佳实践

初衷

起笔写这个项目的原因很简单,面对世面上众多的第三方库,我们很难在短时间内知道什么是最好的。开源平台虽百家争鸣,但落实到开发者的项目中也终究是成王败寇的结局。我希望带给大家一些市面上最好的开源库或解决方案,让大家能快速找到质量最好的第三方库。

我更希望的是,一个初创公司的开发者能在看完这系列文章后,善用轮子,这样能在保证项目开发速度的前提下,还能有点代码质量(并非贬义,经历过的人懂)。当然了,我一个人的力量和知识是有限的,所以我把它放在github上面。希望大家能参与进来,推荐优质的第三方库或者解决方案。

说明

  1. 本文主要是文字内容,所以我会不定期的更新和修改之前的文章内容。所以推荐大家watch下本项目,这样有更新了可以及时提醒。
  2. 关于文章的放置地点,我选择了第三方的平台,没有放在github上。因为git的东西每次都要产生一个commit,不够随意。
  3. 老的文章会随着推荐的库的更新而更新,如果老的文章更新了,我“有可能”会在微博上发布信息。

尾记

学生时期自己有着无穷的自信,毕业后发现必须要用实力来面对现实。现在我虽然不能像以前那样穷尽全力去帮助别人,也不能改变世界,但我希望自己仍能够不断地坚持一些事情,即使是一点点微小的工作。   ———— 在现实中苟延残喘的理想主义者

推荐文章

类别 文章
debug 你所不知道的Android Studio调试技巧  
keymap Android Studio 小技巧/快捷键 合集  

Developer  

Jack Tony: [email protected]

License

Copyright 2015-2019 Jack Tony

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

捐助此项目

android-best-practices's People

Contributors

kaleai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-best-practices's Issues

关于Log工具类 获取调用者类名的方法

如果调用位置在匿名内部类的话,就会产生MainActivity$3这样的TAG, 可以把$后面的去掉,会不会好点

    /**
     * @return 当前的类名(simpleName)
     */
    private static String getClassName() {
        String result;
        StackTraceElement thisMethodStack = (new Exception()).getStackTrace()[2];
        result = thisMethodStack.getClassName();
        int lastIndex = result.lastIndexOf(".");
        result = result.substring(lastIndex + 1, result.length());

        //return result;
        int i = result.indexOf("$");
        return i == -1 ? result : result.substring(0, i);
    }

Log最佳实践中获取类名的问题

为什么不使用以下方式定义LOG_TAG
private static final String LOG_TAG = MainActivity.class.getSimpleName();
这是google给的方法,看上去比getClassName()函数简洁很多
最后的结果:
对于MainActivity
LOG_TAG = "MainActivity"

zan
tools还能这么用

关于AdapterItem的问题

今天刚看到了commonAdapter的实现,感觉非常不错。但是想到了一个如果AdapterItem中,有时候需要调用onActivityResult方法的回调,楼主有什么解决方案么?

关于守护进程拉起application初始化的问题

关于守护进程拉起application初始化的问题,测试结果如下:小米推送是在点击 推送通知后才会拉起,因为用户点击推送消息的时间点不一样,不存在问题;而个推是在守护进程唤醒后会走application。会存在你说的情况。

关于Adapter的一点点意见和疑问

  1. 关于AdapterItem接口的方法名字起的不是很好,bindview这个我觉得有歧义,因为recyclerview本身的adapter里面两个回调onCreateViewHolder和onBindViewholder,我们会在onCreateViewHolder做findById在onBindViewHolder做数据绑定。
    2.关于局部刷新,文章中只是实现了刷新单条数据,而没有实现刷新单条数据里面的某个控件,对于RecyclerView可以使用三个参数的重载方法实现public void onBindViewHolder(VHholder, int position, List payloads) ,不然比如有加载图片的话可能会引起图片闪烁。
    3.如果实践能够结合diffutil就更好

    以上

对adapter 的疑问

为什么认为adapter应该是作为Fragment 或者 Activity的内部类? 还是应该根据情况来区分?

关于通知栏的一个问题

在第一个方法中,StatusBarManager 的对象是从 mContext.getSystemService("statusbar") 获取的,然后利用反射调用了该对象的展开和关闭的方法。
但是在第二个JOOR,create了一个对象,然后调用了这个对象的相应方法。
在第二个方法中,创建的对象不是Context中的对象,所以我怀疑该方法不能起作用。我还没有写的代码验证,但是我感觉这是错的。
不知道我没有说清楚,如果我的理解有误,请指正。

作者很用心,顺便提个疑问?

平时用得比较多的那种判断convertView 是否为空再去决定convertView能否被复用。
它复用的原理是,同一种viewType的时候,只要convertView不为空,不管多少item都可以复用的。

但是你的这种方式,是否只是item自己复用自己的view呢?假如同种类型的item有100条,是不是创建100个view呢?因为看你的TextItem类里面貌似都是每次创建一个新的。

如理解错误,请指出。谢谢~

log那篇文章

第一个问题:object,map,list,array。能不能和在一起,用一个方法
第二个问题:要支持文件写入,以便后续查找

关于第六点

可以使用BuildConfig.DEBUG来管理Log,打包时会自动置为false。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.