欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Google开源库AutoService进行组件化通信

程序员文章站 2022-04-06 20:12:37
目录导包使用总结组件化搭建的过程中需要模块间的通信功能,一般常用的是阿里的Arouter、CC等第三方库通信,最近了解google的开源库AutoService,所以简单写一篇Demo导包首选base的module中引入库 api 'com.google.auto.service:auto-service-annotations:1.0-rc6'然后只需要在被跳转的Activity/Fragment中 annotationProcessor 'com.google.auto.ser...



组件化搭建的过程中需要模块间的通信功能,一般常用的是阿里的Arouter、CC等第三方库通信,最近了解google的开源库AutoService,所以简单写一篇Demo

导包

首选base的module中引入库

 api 'com.google.auto.service:auto-service-annotations:1.0-rc6' 

然后只需要在被跳转的Activity/Fragment中

 annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6' 

如果是kotlin则需要在module中的build中添加

apply plugin: 'kotlin-kapt' 

然后再用kapt导入

 kapt 'com.google.auto.service:auto-service:1.0-rc6' 

使用

首先我们新建一个module模块autodemo,然后新建一个需要打开的DemoActivity

package com.example.autodemo; import android.annotation.SuppressLint; import android.os.Bundle; import android.view.View; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import com.example.autodemo.databinding.ActivityDemoBinding; import com.example.autodemo.utils.Constants; import java.util.Objects; public class DemoActivity extends AppCompatActivity { private ActivityDemoBinding mBinding; @SuppressLint("SetJavaScriptEnabled") @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBinding = DataBindingUtil.setContentView(this, R.layout.activity_demo); mBinding.title.setText(getIntent().getStringExtra(Constants.TITLE)); mBinding.webview.getSettings().setJavaScriptEnabled(true); mBinding.webview.loadUrl(Objects.requireNonNull(getIntent().getStringExtra(Constants.URL))); mBinding.actionBar.setVisibility(getIntent().getBooleanExtra(Constants.IS_SHOW_ACTION_BAR, true) ? View.VISIBLE : View.GONE); mBinding.back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DemoActivity.this.finish(); } }); } } 

然后再common或者base的module中定义一个接口

 ```java public interface IDemoService { void startDemoActivity(Context context, String url, String title, boolean isShowActionBar); } 

然后在你的autodemo模块中实现这个接口

package com.example.autodemo; import android.content.Context; import android.content.Intent; import com.example.autodemo.utils.Constants; import com.google.auto.service.AutoService; import com.example.common.autoservice.IDemoService; @AutoService({IDemoService.class}) public class DemoServiceImpl implements IDemoService { @Override public void startDemoActivity(Context context, String url, String title, boolean isShowActionBar) { if (context != null) { Intent intent = new Intent(context, DemoActivity.class); intent.putExtra(Constants.TITLE, title); intent.putExtra(Constants.URL, url); intent.putExtra(Constants.IS_SHOW_ACTION_BAR, isShowActionBar); context.startActivity(intent); } } } 

再接口中实现startActivity 启动你要启动的DemoActivity 同事使用@AutoService注解 注解你所实现的接口名称

最后在你需要启动这个Activity时候

 IDemoService demoService = AutoServiceLoader.load(IDemoService.class); if(demoService != null) { demoService.startDemoActivity(MainActivity.this, "https://www.baidu.com", "百度", false); } 

这里我自己抽取的一个公共类AutoServiceLoader

public final class AutoServiceLoader { private AutoServiceLoader() { } public static <S> S load(Class<S> service) { try { return ServiceLoader.load(service).iterator().next(); } catch (Exception e) { return null; } } } 

这实现了简单的启动

总结

具体实现源码 回头在学习 哈哈哈

源码地址

https://download.csdn.net/download/ZhaDanRen_/12701902
白嫖渠道
https://github.com/W1913/MvvmDemo

本文地址:https://blog.csdn.net/ZhaDanRen_/article/details/107914706