Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

splm/WeBase

Open more actions menu

Repository files navigation

此文件会持续更新


相关文档:

参考资料:


功能介绍

此项目是WeInject2的整合与升级,因此WeInject2会放弃维护

WeBase,是一个避免开发者反复编写重复代码的工具,所有常用的代码可以自己根据WeCodeManual编写自己的规则,然后交由WeAnnotation-processor生成代码。

注意:使用本项目请结合Goodle Databinding框架使用。如果不想基于这个,那么需要修改Weannotation-processor中的代码

闲话:主要是以技术探讨交流,也参考了大量开源框架的设计思路和功能实现,真的很佩服这些大佬们的智慧,WeBase的很多功能都参考了他们的智慧结晶,这里再次膜拜大佬,感谢你们对技术做出的贡献。

  • 为什么要开发这个东西?
    • 答:之前对注解这个东西并不是很陌生,也一直在用,但当时只停留在运行时,也知道效率是其弱点。直到看到一个大神写的界面路由功能,只需要简单的注解就完美的实现了冗长的跳转代码,十分好奇,可惜当时并没有看到相关实现源码,因为核心的东西并没有公布,所以本着对技术的好奇开始研究这段功能强大但又来历不明的代码。
  • 这个东西能不能作为一种模块集成到项目中?
    • 答:虽然我个人在公司的一些演示Demo中使用了WeBase,用着感觉也算顺手(毕竟自己一笔一划写的),但当中可能还存在很多不合理,不健壮的“坑”,导致这样那样的问题,得不偿失,所以不推荐拿来主义,其次是效率问题,考虑过增量,在编译过程会检查文件的内容变更情况,从而判断是否需要重新创建辅助的Java文件,但经过多次尝试发现一旦Java类不被创建,就意味着其不会被编译器知道,导致类丢失的问题,也看过Gradle关于增量编译的一些资料,但始终没有找到合适的解决方案,这个问题也是一个心病,有了解的朋友,希望可以Fork,一起研究。
  • 这个东西现在有哪些功能?
    • 答:WeBase一直在修改,一是代码混乱,二是不停的抽象,所以功能一直没有向前推进。支持Activity中的控件及其子View的初始化工作;支持简单动画的设定;支持线程创建调用;支持一些核心管理类的管理(App中的各项设定,比如SharePreference字段名称,网络模块的HostUrl等,这些配置好比一份一份的文档,摆在IWorkShop这个接口桌子上,想要拿哪份文档,无论你在哪里,来到这张桌上找就行)
  • 一句话概括这个东西的原理
    • 答:自动创建一个完成了部分功能的代码块,别的类主动去调用。

1.WeVision:动画效果类,一行代码实现复杂特效;更多功能可以参考

WeVisionStatus status=WeVisionEngine.use(Vision.FadeInLeft).playOn(targetView);

2.WeInject

数据传递

这个功能现在废弃,想基于WeAnnotation做一个路由功能

  • a)全新的activity之间传递数据模式,避免出现无尽的new Intent()

之前:

Intent intent=new Intent();
intent.setClass(MainActivity.this,SecActivity.class);
intent.startActivity(intent);

现在:

WeSecondActivity_Plumber.getInstance().setName("Hello,nerd").startForResult(this,0x11);

初始化代码精简
  • b)根除每创建一个Activity都需要添加重复的代码,避免出现无尽的初始化代码;

之前:

public class FourActivity extends BaseActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_four);
            Button btn=findViewById(R.id.btn_from_four);
        }
    }

现在:

@WeInjectPorter(R.layout.activity_main)
public class SecondActivity extends BaseActivity {

    @WeInjectPorter(viewID = R.id.open_1_act_btn)
    public Button mButton;
    @WeInjectPorter(viewID = R.id.open_2_act_btn)
    public Button mloadBtn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

说明:使用思路基本和ButterKnife一样,都是为了避免大量的重复代码出现,同时也尽量将开发的精力转移到核心业务上。


线程的简化
  • c)线程的使用

之前:

1.Thread threa=new Thread();
2.实现Runnable接口
//代码不赘述

现在:

@WeInjectBeadle
public void doSomeThingsBackground(String name){
     doSomething();
}
动态生成Java类文件的语法简化
  • 如果需要自定义注解插件或者有自动构建Java类的需求可以使用,详细参考WeCode的使用

###详细使用

如何开始

  • 1.创建一个BaseActivity继承,并在OnCreate()中加入
WeWorkersProxy.bind(this);

或者直接继承me.splm.app.core.logic.view.BaseActivity

  • 设置Activity布局
@WeInjectPorter(R.layout.activity_main)
public class SecondActivity
  • 初始化View控件
@WeInjectPorter(viewID = R.id.open_1_act_btn)
public Button mButton;
  • 初始化子View控件
@WeInjectPorter(viewID = R.id.layout_1_vs)
public ViewStub mStubView;
@WeInjectPorter(parentView = "mStubView",viewID = R.id.open_2_act_btn)
public Button mButton2;

注意写在子View变量上的注解ParentView一定要与父View的变量名对应,并且一定要在当前OnCreate()加入:

WeMainActivity_Porter.getInstance().initOtherView();

如果没有WeXXXX_Porter类,请先ReBuild

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.