项目小技巧

Project Experience

  • 关于触屏的问题

最小的触屏距离判断是否滑动

ViewConfigurationCompat.getScaledPagingTouchSlop(ViewConfiguration.get(getContext()))

触发移动事件的最短距离,如果小于这个距离就不触发移动控件,如viewpager就是用这个距离来判断用户是否翻页

参考

  • 关于内存问题

变量的使用

HashMap : 尽量使用 WeakHashMap
List:尽量用 SparseArrayList

context 和 view 内存释放问题

    除了在Activity添加如下释放方法。更重要的是变量内部类和静态类要用弱了引用
    ----------------------------------------------
    
    @Override
    protected void attachBaseContext(Context newBase) {
        super.attachBaseContext(new ContextWrapper(newBase) {
            @Override
            public Object getSystemService(String name) {

                if (Context.AUDIO_SERVICE.equals(name)){
                    return getApplicationContext().getSystemService(name);
                }

                return super.getSystemService(name);
            }
        });
    }
    ----------------------------------------------

关于相关问题请参照

  • 关于studio 打包问题
Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease'.
 java.io.IOException: Please correct the above warnings first.

解决方案
defaultConfig {
multiDexEnabled true
}

  • 判断手机是否root

    private final static int kSystemRootStateUnknow = -1;
    
    private final static int kSystemRootStateDisable = 0;
    
    private final static int kSystemRootStateEnable = 1;
    
    private static int systemRootState = kSystemRootStateUnknow;

    public static boolean isRootSystem() {
        if (systemRootState == kSystemRootStateEnable) {
            return true;
        } else if (systemRootState == kSystemRootStateDisable) {

            return false;
        }
        File f = null;
        final String kSuSearchPaths[] = {"/system/bin/", "/system/xbin/", "/system/sbin/", "/sbin/", "/vendor/bin/"};
        try {
            for (int i = 0; i < kSuSearchPaths.length; i++) {
                f = new File(kSuSearchPaths[i] + "su");
                if (f != null && f.exists()) {
                    systemRootState = kSystemRootStateEnable;
                    return true;
                }
            }
        } catch (Exception e) {
        }
        systemRootState = kSystemRootStateDisable;
        return false;
    }
    }
    

gradle 一致卡在那里编译

原因某个链接连不上,这个是主要原因
 ./gradlew build --debug
到项目目录下,用上述命令,去排查下

一般我们有时候会要做防止快速重复点击,用别人框架又怕又坑,那么自己封装一下
可以了灵活应用,既可以封装成一个Listener,也可自己在特定地方添加


    public abstract class NoDoubleClickListener implements OnClickListener {

            public static final int MIN_CLICK_DELAY_TIME = 1000;
            private long lastClickTime = 0;

            @Override
            public void onClick(View v) {
                long currentTime = Calendar.getInstance().getTimeInMillis();
                if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
                    lastClickTime = currentTime;
                    onNoDoubleClick(v);
                } 
            }   
        }

转载请注明出处:http://www.jianshu.com/u/c864df301e25

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 1.写函数考虑的是功能如何实现,不用考虑怎么舒服,功能为主,功能之外的事暂不考虑。 2.ascii码值可以直接用英...
    腹黑小叶子orz阅读 261评论 0 1
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,540评论 25 708
  • 东西有点多,但是资源绝对nice,自己都全部亲身体验过了,大家可放心使用 github排名: https://gi...
    Rance935阅读 11,280评论 26 312
  • 人常说,父亲是座山,撑起了家里的那片天。 在我们的记忆中,父亲就不是山,连岭也算不上。每天就会抽自己的旱烟袋,从不...
    LFFYj7阅读 1,445评论 0 1
  • 目 录|《我们从未陌生过》 上一章|《青春是用来挥霍的》 文 | 逐光 14 在苦苦备战高考时,日日夜夜,我们做梦...
    我逐光而居阅读 573评论 5 23