美文网首页
上班第八周

上班第八周

作者: 寒冬_腊月 | 来源:发表于2020-06-28 22:16 被阅读0次

    需求已经测试通过了,手上没有其它事,就看代码,熟悉一些功能和模块,也方便后面快速开发;经过2个版本的优化,通过Bugly看到用户ANR率由我刚来的0.35%降到0.08%, 做的优化总算是见效果了

    app调试功能

    为了方便app调试一些功能,都会设置一个单独的调试界面,公司app设置的位置就首页的Title
    使用注解的方式添加需要调试的功能,可以指定到类

    public class DeveloperModel {
    
        @DeveloperActivity.Group(name = "test")
        public static void addGroup(DeveloperActivity.GroupItem group) throws Exception {
            group.addItem("Codova调试", WebViewActivity.class, null);
            group.addItem("注解启动页面", WebViewActivity.class, null);
    
        }
    }
    
    
    public class DeveloperActivity extends AppCompatActivity {
         @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            setContentView(R.layout.activity_developer);
    
            createData();
        }
    
    }
    
    /**
         * 反射获取数据
         */
        private void createData() {
            final List<GroupItem> l = new ArrayList<>();
            if (aClass == null) return;
            Method[] methods = aClass.getDeclaredMethods();
    
            GroupItem item = null;
            for (Method m : methods) {
                Group group = m.getAnnotation(Group.class);
    
                try {
                    item = new GroupItem();
                    item.name = group == null ? "找不到标题" : group.name();
                    m.invoke(null, item);
                    l.add(item);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    
       //指明修饰的注解的生存周期,即会保留到哪个阶段,不加的话运行的时候会获取不到name
        @Retention(RetentionPolicy.RUNTIME)
        public @interface Group {
            String name() default "默认分组";
        }
    
        public static class ChildItem {
            public String name;
            public Intent params;
            public Class<? extends Activity> aClass;
    
            public ChildItem(String name, Class<? extends Activity> aClass, Intent params) {
                this.name = name;
                this.params = params;
                this.aClass = aClass;
            }
    
        }
    
        public static class GroupItem{
            public String name;
            public List<ChildItem> childItems = new ArrayList<>();
    
            public List<ChildItem> getChildList() {
                return childItems;
            }
    
            public ChildItem addItem(String name, Class<? extends Activity> aClass, Intent intent) {
                ChildItem childItem = new ChildItem(name, aClass, intent);
                childItems.add(childItem);
                return childItem;
            }
        }
    
    

    BlockingQueue介绍

    这几天在看Volley源码,发现使用了两个队列:缓存队列和网络队列,用的是Concurrent包下面的PriorityBlockingQueue类

       /** The cache triage queue. */
        private final PriorityBlockingQueue<Request<?>> mCacheQueue = new PriorityBlockingQueue<>();
    
        /** The queue of requests that are actually going out to the network. */
        private final PriorityBlockingQueue<Request<?>> mNetworkQueue = new PriorityBlockingQueue<>();
    
    

    BlockingQueue(阻塞队列)可以用来在多线程环境中实现数据共享,所谓阻塞,在某些情况下会挂起线程(即阻塞),一旦条件满足,被挂起的线程又会自动被唤醒

    PriorityBlockingQueue继承BlockingQueue类,是一个基于优先级的阻塞,优先级通过Request实现Comparable接口,然后对比getPriority()mSequence的值来控制

    注意的是PriorityBlockingQueue并不会阻塞数据生产者,而只会在没有可消费的数据时,阻塞数据的消费者。因此使用的时候要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度

    小结

    1. ScrollView添加点击动作

      使用OnTouchListener

    setOnTouchListener(new View.OnTouchListener() {
                @Override
                public boolean onTouch(View v, MotionEvent event) {
                    //dosomething
                    return false;
                }
            });
    
    
    1. 翻墙
      实在受不了打开StackOverFlow太慢了,经同事介绍,开通了一个vpn,再安装了一个Proxy SwitchyOmega插件,来控制哪些web走代理,哪些直接访问,真香

      配制命令如下

    sudo bash go.sh --local ./v2ray-linux-64.zip 
    sudo gvim /etc/v2ray/config.json 
    sudo service v2ray restart
    
    
    1. 多渠道打包
      项目多渠道打包使用的是gradle-packer-plugin插件

    参考

    linux下搭建v2ray服务端和客户端

    v2ray-core

    Volley中使用的优先级队列 PriorityQueue

    Java多线程-工具篇-BlockingQueue

    相关文章

      网友评论

          本文标题:上班第八周

          本文链接:https://www.haomeiwen.com/subject/uqvgfktx.html