继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Android中组件化的一种实现方式Arouter的使用

nickcau
关注TA
已关注
手记 114
粉丝 6509
获赞 303

ARouter是阿里2017年开源的页面路由框架,是今年比较火的一个开源框架,目前在Github上已经有2.2k的小星星了。官方对这个框架的定义是ARouter是阿里巴巴开源的Android平台中对页面、服务提供路由功能的中间件,提倡的是简单且够用


Google提供的原声路由主要是通过intent,可以分成显示和隐式两种。显示的方案会导致类之间的直接依赖问题,耦合严重;隐式intent需要的配置清单中统一声明,首先有个暴露的问题,另外在多模块开发中协作也比较困难。只要调用startActivity后面的环节我们就无法控制了,在出现错误时无能为力,而ARouter可以在跳转过程中进行拦截,出现错误时可以实现降级策略。

要使用Arouter我们现在build.gradle引入:

annotationProcessor 'com.alibaba:arouter-compiler:1.1.4'
compile'com.alibaba:arouter-api:1.3.1'

在项目工程下的build.gradle的dependencies下引入:

classpath "com.alibaba:arouter-register:1.0.2"


然后在application中的oncreate初始化:

ARouter.openLog();
ARouter.openDebug();
ARouter.init(this);

然后建立一个activity:

public class ArouterTest extends Activity {

    public static void startActivity(Context context) {
        Intent intent = new Intent();
        intent.setClass(context,ArouterTest.class);
        context.startActivity(intent);
    }


    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.arouter_activity_main);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //页面
                ARouter.getInstance().build("/test3/activity3").navigation();
            }
        });

        findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                
                TestService service = (TestService) ARouter.getInstance().build("/testservice/hello").navigation();
                service.sayHello("hello sdsdf");

            }
        });

    }
}

和一个service:

@Route(path = "/testservice/hello")
public class TestServiceImpl implements TestService {
    Context mContext;

    @Override
    public void sayHello(String name) {
        Toast.makeText(mContext, "Hello " + name, Toast.LENGTH_SHORT).show();
    }

    /**
     * Do your init work in this method, it well be call when processor has been load.
     *
     * @param context ctx
     */
    @Override
    public void init(Context context) {
        mContext = context;
    }
}

在子工程mylibrary那里建立一个activity:

@Route(path = "/test3/activity3", name = "测试用 Activity")
public class MainActivity3 extends Activity {

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);
    }
}

再建立一个service:

public interface TestService extends IProvider {
    void sayHello(String name);
}

运行效果:

https://img2.mukewang.com/5c1ed12c0001aec806141174.jpg

点击页面路由就可以跳转去MainActivity3

点击服务路由就可以找到TestService那个服务,然后调用sayHello

代码在:https://github.com/nickgao1986/StepSport

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP