├── .gitignore ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── chao │ │ │ └── android │ │ │ └── tools │ │ │ └── service_pools │ │ │ ├── A.java │ │ │ ├── App.java │ │ │ ├── AppService.java │ │ │ ├── AppService2.java │ │ │ ├── BaseActivity.java │ │ │ ├── CommonPrinter.java │ │ │ ├── IA.java │ │ │ ├── LauncherActivity.java │ │ │ ├── MainActivity.java │ │ │ ├── Printer.java │ │ │ ├── Printer2.java │ │ │ ├── SecondActivity.java │ │ │ ├── SimpleFragment.java │ │ │ ├── abs │ │ │ └── Abs.java │ │ │ ├── cache │ │ │ ├── IPoolInstance.java │ │ │ ├── Pool.java │ │ │ └── PoolInstance.java │ │ │ ├── event │ │ │ ├── EventSample.java │ │ │ ├── HisEvent.java │ │ │ └── MyEvent.java │ │ │ ├── fragments │ │ │ ├── EventFragment.java │ │ │ └── HisEventFragment.java │ │ │ ├── inherited │ │ │ ├── BaseInheritedActivity.java │ │ │ ├── InheritedInheritedActivity1.java │ │ │ ├── InheritedInheritedActivity11.java │ │ │ ├── InheritedInheritedActivity111.java │ │ │ └── InheritedInheritedActivity2.java │ │ │ ├── init │ │ │ ├── InitSampleActivity.java │ │ │ ├── InitSyncSampleFragment.java │ │ │ ├── Test.java │ │ │ ├── TestInitService.java │ │ │ ├── TestLazyInitServicePriorityMax.java │ │ │ ├── TestLazyInitServicePriorityMin.java │ │ │ └── TestLazyInitServicePriorityNormal.java │ │ │ ├── path │ │ │ ├── IRepeat.java │ │ │ ├── PathService.java │ │ │ ├── PathService2.java │ │ │ ├── RepeatePathService.java │ │ │ └── TestPathServices.java │ │ │ ├── route │ │ │ ├── AppRouters.java │ │ │ ├── RouteDefine.java │ │ │ ├── RouteField.java │ │ │ ├── TestRouteTargetActivity.java │ │ │ └── interceptor │ │ │ │ ├── RouteContinueInterceptor5.java │ │ │ │ ├── RouteExceptionInterceptor1.java │ │ │ │ └── RouteInterruptInterceptor4.java │ │ │ ├── router2 │ │ │ ├── RouteApi.java │ │ │ └── RouteFragment.java │ │ │ ├── rpc │ │ │ ├── RPCSampleFragment.java │ │ │ ├── TestService.java │ │ │ └── impl │ │ │ │ └── LocalFirstServiceImpl.java │ │ │ ├── sample │ │ │ └── SimpleBaseActivity.java │ │ │ ├── serviceinterceptor │ │ │ ├── MinPriorityServiceInterceptor.java │ │ │ ├── NormalServiceInterceptor.java │ │ │ └── ServiceDirectReturnInterceptor.java │ │ │ ├── test │ │ │ ├── InitService1.java │ │ │ ├── InitService2.java │ │ │ ├── InitService3.java │ │ │ ├── InitService4.java │ │ │ └── InitService5.java │ │ │ └── xxxxx │ │ │ ├── ASMServiceProxy.java │ │ │ ├── ASMStaticClass.java │ │ │ └── ServiceProxyBean.java │ ├── res │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ │ ├── device_info_settings.xml │ │ │ ├── empty.xml │ │ │ ├── init_sync_sample.xml │ │ │ ├── main.xml │ │ │ ├── rpc_page.xml │ │ │ └── test_route_activity.xml │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── raw │ │ │ └── ami_config.xml │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ └── resources │ │ └── META-INF │ │ └── my-services │ │ └── test.txt │ └── test │ └── java │ └── chao │ └── test │ └── service_pools │ └── ExampleUnitTest.java ├── assembleDebug.sh ├── autoservice ├── .gitignore ├── build.gradle ├── gradle.properties └── src │ └── main │ ├── groovy │ └── chao │ │ └── android │ │ └── gradle │ │ └── servicepool │ │ ├── Logger.java │ │ ├── compiler │ │ ├── AutoServiceAnnotation.java │ │ ├── AutoServiceAnnotationDetect.java │ │ ├── AutoServiceEventVisitor.groovy │ │ ├── AutoServiceExtension.java │ │ ├── AutoServiceField.java │ │ ├── AutoServiceFieldClassVisitor.java │ │ ├── AutoServicePlugin.groovy │ │ ├── AutoServiceTransform.groovy │ │ ├── AutoServiceVisitor.java │ │ ├── AutoServiceWeaver.groovy │ │ ├── ClassUtil.java │ │ ├── Constant.java │ │ └── ServiceInfo.java │ │ └── hunter │ │ ├── HunterTransform.java │ │ ├── RunVariant.java │ │ ├── asm │ │ ├── BaseWeaver.java │ │ ├── ClassLoaderHelper.java │ │ ├── ExtendClassWriter.java │ │ └── IWeaver.java │ │ └── package-info.java │ └── resources │ └── META-INF │ └── gradle-plugins │ └── sp.autoservice.properties ├── build.gradle ├── buildSrc ├── .gitignore └── build.gradle ├── changelog.md ├── debug.sh ├── empty.gradle ├── empty ├── .gitignore └── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── maven.gradle ├── modules.gradle ├── release.keystore ├── settings.gradle ├── sp ├── .gitignore ├── build.gradle ├── gradle.properties └── src │ ├── main │ └── java │ │ └── chao │ │ └── java │ │ └── tools │ │ └── servicepool │ │ ├── AbsInitServiceManager.java │ │ ├── BuildInServiceLoader.java │ │ ├── ClassTypeAdapter.java │ │ ├── Constant.java │ │ ├── DefaultInitService.java │ │ ├── DefaultService.java │ │ ├── DefaultServiceController.java │ │ ├── DependencyManager.java │ │ ├── ExceptionHandler.java │ │ ├── IInitService.java │ │ ├── ILogger.java │ │ ├── IPathService.java │ │ ├── IService.java │ │ ├── IServiceFactories.java │ │ ├── IServiceFactory.java │ │ ├── IServiceInterceptor.java │ │ ├── IServiceInterceptorCallback.java │ │ ├── IServiceLoader.java │ │ ├── IServices.java │ │ ├── InitProxy.java │ │ ├── InitServiceManager.java │ │ ├── InnerProxy.java │ │ ├── LazyHolder.java │ │ ├── Logger.java │ │ ├── NoOpConstructorArg.java │ │ ├── NoOpInstance.java │ │ ├── NoOpInstanceFactory.java │ │ ├── NoOpInstantiator.java │ │ ├── PathServices.java │ │ ├── ReflectUtil.java │ │ ├── ServiceController.java │ │ ├── ServiceFactories.java │ │ ├── ServiceInterceptorStrategy.java │ │ ├── ServicePool.java │ │ ├── ServicePoolException.java │ │ ├── ServiceProxy.java │ │ ├── ServiceThreadFactory.java │ │ ├── Sp.java │ │ ├── annotation │ │ ├── Event.java │ │ ├── Init.java │ │ ├── Service.java │ │ └── Services.java │ │ ├── cache │ │ ├── AbsServiceCacheStrategy.java │ │ ├── Global.java │ │ ├── Once.java │ │ ├── ServiceCacheStrategy.java │ │ ├── Soft.java │ │ ├── Specific.java │ │ ├── Weak.java │ │ └── custom │ │ │ ├── Custom.java │ │ │ ├── CustomCacheStrategy.java │ │ │ └── CustomCombineStrategy.java │ │ ├── combine │ │ ├── CombineCallback.java │ │ ├── CombineEmptyHandler.java │ │ ├── CombineManager.java │ │ ├── CombineService.java │ │ ├── CombineStrategy.java │ │ ├── CombineThreadExecutor.java │ │ ├── CombineThreadFactory.java │ │ └── DefaultCombineStrategy.java │ │ ├── debug │ │ └── Debug.java │ │ ├── event │ │ ├── EventManager.java │ │ ├── EventService.java │ │ └── WeakList.java │ │ └── thirdparty │ │ └── CancelableCountDownLatch.java │ └── test │ ├── java │ └── chao │ │ └── test │ │ └── servicepool │ │ └── test │ │ └── noop │ │ ├── NoOpInstanceFactoryForTest.java │ │ ├── TestNoOpObject.java │ │ └── test │ │ ├── DependencyTest.java │ │ ├── NoOpTest.java │ │ ├── SampleTest.java │ │ ├── ServiceTest.java │ │ ├── TestLazy.java │ │ ├── TestOpInstanceFactory.java │ │ ├── noop │ │ ├── TestNoOpObjectWithArgumentsConstructor.java │ │ ├── TestNoOpObjectWithDefaultConstructor.java │ │ ├── TestNoOpObjectWithPrivateConstructor.java │ │ └── TestNoOpObjectWithProtectedConstructor.java │ │ └── service │ │ ├── II.java │ │ ├── IPrinter.java │ │ ├── NoOp.java │ │ ├── NoPublicService.java │ │ ├── Printer.java │ │ ├── TestAbsImplService.java │ │ ├── TestAbsService.java │ │ ├── TestLazyService.java │ │ ├── TestLazyService1.java │ │ ├── TestLazyService2.java │ │ ├── TestLazyServiceFactory.java │ │ ├── TestNoOpService.java │ │ ├── TestService.java │ │ ├── TestService2.java │ │ └── TestWeakService.java │ └── resources │ └── META-INF │ └── services │ ├── chao.java.tools.servicepool.IService │ ├── chao.java.tools.servicepool.IServiceFactory │ └── com.aicaigroup.servicepool.DependencyManager ├── spa ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── chao │ │ │ └── android │ │ │ └── tools │ │ │ └── servicepool │ │ │ ├── AndroidLogger.java │ │ │ ├── Spa.java │ │ │ └── init │ │ │ ├── AndroidInitService.java │ │ │ └── DefaultDependencyManager.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── chao │ └── test │ └── servicepool │ └── android │ ├── ExampleInstrumentedTest.java │ └── ExampleUnitTest.java ├── sprouter ├── .gitignore ├── build.gradle ├── gradle.properties ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── chao │ │ └── android │ │ └── tools │ │ └── router │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── chao │ │ │ └── android │ │ │ └── tools │ │ │ └── router │ │ │ ├── Autowired.java │ │ │ ├── RouteArgs.java │ │ │ ├── RouteBuilder.java │ │ │ ├── RouteCombineStrategyImpl.java │ │ │ ├── RouteException.java │ │ │ ├── RouteInterceptor.java │ │ │ ├── RouteInterceptorCallback.java │ │ │ ├── RouteManager.java │ │ │ ├── RouteNavigationCallback.java │ │ │ ├── RouteParamParse.java │ │ │ ├── RouterService.java │ │ │ ├── RouterServiceInterceptor.java │ │ │ ├── SpRouter.java │ │ │ └── annotation │ │ │ ├── Route.java │ │ │ ├── RouteAction.java │ │ │ ├── RouteData.java │ │ │ ├── RouteEnterAnim.java │ │ │ ├── RouteExitAnim.java │ │ │ ├── RouteFlags.java │ │ │ ├── RouteParam.java │ │ │ ├── RouteRequestCode.java │ │ │ └── RouteType.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── chao │ └── android │ └── tools │ └── router │ └── ExampleUnitTest.java ├── sprpc ├── .gitignore ├── build.gradle ├── proguard-rules.pro ├── readme.md └── src │ ├── androidTest │ └── java │ │ └── chao │ │ └── android │ │ └── tools │ │ └── servicepool │ │ └── rpc │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── chao │ │ │ └── android │ │ │ └── tools │ │ │ └── rpc │ │ │ ├── ClassArrayTypeAdapter.java │ │ │ ├── RemoteCallbackHandler.java │ │ │ ├── RemoteClient.java │ │ │ ├── RemoteClientMethod.java │ │ │ ├── RemoteHandler.java │ │ │ ├── RemoteMessageService.java │ │ │ ├── RemoteServer.java │ │ │ ├── RemoteService.java │ │ │ ├── RemoteServiceException.java │ │ │ ├── RemoteServiceInterceptor.java │ │ │ ├── RemoteUtil.java │ │ │ ├── SpRPC.java │ │ │ └── annotation │ │ │ └── RemoteServiceConfig.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── chao │ └── android │ └── tools │ └── servicepool │ └── rpc │ └── ExampleUnitTest.java ├── tests ├── applib1 │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── chao │ │ │ └── test │ │ │ └── applib1 │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── chao │ │ │ │ └── test │ │ │ │ └── applib1 │ │ │ │ ├── AService.java │ │ │ │ ├── GlobalService.java │ │ │ │ ├── OnceService.java │ │ │ │ ├── PathService.java │ │ │ │ ├── PriorityService1.java │ │ │ │ ├── PriorityService2.java │ │ │ │ └── TempService.java │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── java │ │ └── chao │ │ └── test │ │ └── applib1 │ │ └── ExampleUnitTest.java ├── applib2 │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── chao │ │ │ └── app │ │ │ └── applib2 │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── chao │ │ │ │ └── app │ │ │ │ └── applib2 │ │ │ │ └── BService.java │ │ └── res │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── java │ │ └── chao │ │ └── app │ │ └── applib2 │ │ └── ExampleUnitTest.java ├── appservice │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── chao │ │ └── test │ │ └── appservice │ │ ├── AppServiceFactory.java │ │ ├── IAppLib.java │ │ └── IJavaLib.java ├── pool │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ └── java │ │ └── chao │ │ └── app │ │ └── pool │ │ ├── IA.java │ │ ├── IB.java │ │ ├── IPathInstanceService.java │ │ ├── IPriorityService.java │ │ └── LifecycleService.java ├── remoteexample │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── chao │ │ │ └── app │ │ │ └── remoteexample │ │ │ └── ExampleInstrumentedTest.java │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── chao │ │ │ │ └── app │ │ │ │ └── remoteexample │ │ │ │ ├── ExampleService.java │ │ │ │ ├── LaunchActivity.java │ │ │ │ └── serviceimpl │ │ │ │ ├── ExampleServiceImpl.java │ │ │ │ ├── LocalFirstServiceImpl.java │ │ │ │ └── RPCForceMainServiceImpl.java │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ └── values │ │ │ └── strings.xml │ │ └── test │ │ └── java │ │ └── chao │ │ └── app │ │ └── remoteexample │ │ └── ExampleUnitTest.java ├── testpluginlib │ ├── .gitignore │ ├── build.gradle │ └── src │ │ └── main │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── testpluginlib │ │ │ ├── MyClass.java │ │ │ ├── TestPluginService.java │ │ │ ├── TestPluginService2.java │ │ │ └── TestPluginService3.java │ │ └── resources │ │ └── META-INF │ │ └── services │ │ └── chao.java.tools.servicepool.IService └── testremoteapi │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ ├── androidTest │ └── java │ │ └── chao │ │ └── app │ │ └── remoteapi │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── chao │ │ │ └── app │ │ │ └── remoteapi │ │ │ ├── IExampleService.java │ │ │ ├── LocalFirstService.java │ │ │ └── RPCForceMainService.java │ └── res │ │ └── values │ │ └── strings.xml │ └── test │ └── java │ └── chao │ └── app │ └── remoteapi │ └── ExampleUnitTest.java ├── todo-list.md └── transformJarDir.sh /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | /.idea/caches/build_file_checksums.ser 6 | /.idea/libraries 7 | /.idea/modules.xml 8 | /.idea/workspace.xml 9 | .DS_Store 10 | /build 11 | /captures 12 | .externalNativeBuild 13 | 14 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /release 3 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | 2 | -ignorewarnings 3 | 4 | -dontwarn com.google.common.** 5 | 6 | -dontwarn net.bytebuddy.** 7 | -keep class net.bytebuddy.** {*;} 8 | 9 | -keep class chao.android.tools.router.** {*;} 10 | -keep class chao.android.tools.rpc.** {*;} 11 | -keep class chao.android.tools.servicepool.** {*;} 12 | 13 | -keep @chao.java.tools.servicepool.annotation.* class * 14 | -keep class * implements chao.java.tools.servicepool.IService { *; } 15 | 16 | -keep @chao.android.tools.rpc.annotation.* class ** {*;} 17 | 18 | -keep class chao.java.tools.** {*;} 19 | 20 | -keep class com.android.** {*;} 21 | 22 | # 避免混淆泛型 23 | #-keepattributes Signature 24 | # 抛出异常时保留代码行号 25 | -keepattributes SourceFile,LineNumberTable 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/A.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | import chao.java.tools.servicepool.annotation.Service; 5 | 6 | /** 7 | * @author qinchao 8 | * @since 2019/6/25 9 | */ 10 | @Service 11 | public class A implements IA, IService { 12 | 13 | private int a; 14 | 15 | { 16 | a = 10; 17 | } 18 | 19 | public A() { 20 | a = 100; 21 | } 22 | 23 | public int getInt() { 24 | return 10086; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/App.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | 6 | import com.google.common.base.Stopwatch; 7 | 8 | import java.util.concurrent.TimeUnit; 9 | 10 | import chao.android.tools.servicepool.Spa; 11 | import chao.app.ami.Ami; 12 | 13 | /** 14 | * 15 | * 16 | * @author qinchao 17 | * @since 2019/4/30 18 | */ 19 | public class App extends Application { 20 | 21 | public static Context sContext; 22 | 23 | private static Application sApp; 24 | 25 | public App() { 26 | } 27 | 28 | public static Context getContext() { 29 | return sContext; 30 | } 31 | 32 | public static Application application() { 33 | return sApp; 34 | } 35 | 36 | @Override 37 | public void onCreate() { 38 | super.onCreate(); 39 | 40 | sApp = this; 41 | 42 | sContext = getApplicationContext(); 43 | 44 | Stopwatch stopwatch = Stopwatch.createStarted(); 45 | 46 | 47 | // new SimpleFragment().onClick(null); 48 | 49 | Spa.init(this); 50 | Spa.setExceptionHandler((e, message) -> { 51 | // logger.log(message); 52 | e.printStackTrace(); 53 | System.out.println("get service err: " + e); 54 | }); 55 | 56 | Ami.log(stopwatch.elapsed(TimeUnit.MILLISECONDS)); 57 | 58 | // Ami.init(this); 59 | // Ami.setDrawerId(R.raw.ami_config); 60 | Ami.log(stopwatch.elapsed(TimeUnit.MILLISECONDS)); 61 | 62 | // commonService.print(); 63 | // 64 | // haha.print(); 65 | // 66 | // appService.print(); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/AppService.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | import chao.java.tools.servicepool.annotation.Service; 5 | 6 | /** 7 | * @author qinchao 8 | * @since 2019/4/29 9 | */ 10 | @Service(priority = IService.Priority.MAX_PRIORITY, scope = IService.Scope.once) 11 | public class AppService implements Printer { 12 | 13 | @Override 14 | public void print() { 15 | System.out.println("I'm app service"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/AppService2.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | import chao.java.tools.servicepool.annotation.Service; 5 | 6 | /** 7 | * @author qinchao 8 | * @since 2019/4/29 9 | */ 10 | @Service(priority = IService.Priority.MAX_PRIORITY) 11 | public class AppService2 implements Printer2 { 12 | 13 | @Override 14 | public void print() { 15 | System.out.println("I'm app service 2"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/BaseActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.os.Bundle; 5 | import androidx.annotation.Nullable; 6 | 7 | import chao.app.ami.base.AMIActivity; 8 | import chao.java.tools.servicepool.IService; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-10-09 13 | */ 14 | 15 | @SuppressLint("Registered") 16 | public class BaseActivity extends AMIActivity implements IService { 17 | 18 | 19 | @Override 20 | public void onCreate(@Nullable Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | } 23 | 24 | @Override 25 | public void onDestroy() { 26 | super.onDestroy(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/CommonPrinter.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import chao.java.tools.servicepool.annotation.Service; 4 | 5 | /** 6 | * @author luqin 7 | * @date 2019-07-17 8 | */ 9 | @Service 10 | public class CommonPrinter implements Printer { 11 | 12 | public void print() { 13 | System.out.println("I'm a common Printer."); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/IA.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2020-07-12 8 | */ 9 | public interface IA extends IService { 10 | int getInt(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/LauncherActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import android.os.Bundle; 4 | 5 | import chao.android.tools.service_pools.router2.RouteFragment; 6 | import chao.android.tools.service_pools.rpc.RPCSampleFragment; 7 | import chao.app.ami.UI; 8 | import chao.app.ami.base.AMIActivity; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2020-07-02 13 | */ 14 | public class LauncherActivity extends AMIActivity { 15 | 16 | 17 | @Override 18 | public void setupView(Bundle savedInstanceState) { 19 | super.setupView(savedInstanceState); 20 | 21 | UI.show(this, MainActivity.class); 22 | finish(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/Printer.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | 5 | /** 6 | * @author luqin qinchao@mochongsoft.com 7 | * @project: zmjx-sp 8 | * @description: 9 | * @date 2019-07-16 10 | */ 11 | public interface Printer extends IService { 12 | void print(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/Printer2.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | /** 4 | * @author luqin qinchao@mochongsoft.com 5 | * @project: zmjx-sp 6 | * @description: 7 | * @date 2019-07-16 8 | */ 9 | public interface Printer2 { 10 | void print(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/SecondActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.Nullable; 5 | import androidx.appcompat.app.AppCompatActivity; 6 | 7 | import chao.android.tools.service_pools.path.PathService; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | 11 | /** 12 | * @author luqin 13 | * @since 2019-08-26 14 | */ 15 | public class SecondActivity extends AppCompatActivity { 16 | 17 | // @Service 18 | // private CommonPrinter commonPrinter; 19 | 20 | @Service(path = "/app/path") 21 | private PathService pathService; 22 | 23 | 24 | 25 | SecondPrinter secondPrinter = new SecondPrinter(); 26 | 27 | 28 | @Override 29 | protected void onCreate(@Nullable Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | secondPrinter.print(); 32 | 33 | pathService.print(); 34 | } 35 | 36 | public class SecondPrinter implements Printer { 37 | 38 | @Override 39 | public void print() { 40 | System.out.println("I'm in second activity."); 41 | // commonPrinter.print(); 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/SimpleFragment.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools; 2 | 3 | import android.view.View; 4 | 5 | import java.lang.reflect.Method; 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | import java.util.concurrent.ExecutorService; 9 | import java.util.concurrent.Executors; 10 | 11 | import chao.android.tools.service_pools.xxxxx.ASMServiceProxy; 12 | import chao.android.tools.servicepool.Spa; 13 | import chao.app.ami.base.AmiSimpleFragment; 14 | 15 | /** 16 | * @author luqin 17 | * @since 2020-07-02 18 | */ 19 | public class SimpleFragment extends AmiSimpleFragment { 20 | 21 | 22 | @Override 23 | public void onClick(View v) { 24 | ExecutorService executorService = Executors.newFixedThreadPool(300); 25 | for (int i = 0; i < 300; i++) { 26 | executorService.execute(new Runnable() { 27 | @Override 28 | public void run() { 29 | Spa.init(App.sContext); 30 | } 31 | }); 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/abs/Abs.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.abs; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2019-09-26 8 | */ 9 | public abstract class Abs implements IService { 10 | public abstract void method(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/cache/IPoolInstance.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.cache; 2 | 3 | import chao.java.tools.servicepool.IService; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2020-08-06 8 | */ 9 | public interface IPoolInstance extends IService { 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/cache/Pool.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.cache; 2 | 3 | import chao.java.tools.servicepool.IServiceFactory; 4 | import chao.java.tools.servicepool.annotation.Service; 5 | import chao.java.tools.servicepool.cache.custom.CustomCacheStrategy; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2020-08-06 10 | */ 11 | @Service(scope = 10) 12 | public class Pool implements CustomCacheStrategy { 13 | 14 | @Override 15 | public IPoolInstance getService(IServiceFactory factory, Class originClass, Class serviceClass) { 16 | return (IPoolInstance) factory.createInstance(serviceClass); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/cache/PoolInstance.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.cache; 2 | 3 | import chao.java.tools.servicepool.annotation.Service; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2020-08-06 8 | */ 9 | @Service(scope = 10) 10 | public class PoolInstance implements IPoolInstance { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/event/EventSample.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.event; 2 | 3 | import chao.android.tools.service_pools.Printer; 4 | import chao.java.tools.servicepool.ServicePool; 5 | import chao.java.tools.servicepool.annotation.Service; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2019-08-27 10 | */ 11 | public class EventSample implements MyEvent { 12 | 13 | private int event; 14 | 15 | @Service 16 | private Printer printer; 17 | 18 | public EventSample() { 19 | this(0); 20 | } 21 | 22 | public EventSample(int event) { 23 | } 24 | 25 | public void handleEvent() { 26 | printer.print(); 27 | } 28 | 29 | @Override 30 | public void postEvent() { 31 | System.out.println("this is event sample."); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/event/HisEvent.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.event; 2 | 3 | import chao.java.tools.servicepool.annotation.Event; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2019-08-29 8 | */ 9 | @Event 10 | public interface HisEvent { 11 | void postHisEvent(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/event/MyEvent.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.event; 2 | 3 | import chao.java.tools.servicepool.annotation.Event; 4 | import chao.java.tools.servicepool.event.EventService; 5 | 6 | /** 7 | * @author luqin 8 | * @since 2019-08-27 9 | */ 10 | @Event 11 | public interface MyEvent { 12 | void postEvent(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/fragments/EventFragment.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.fragments; 2 | 3 | import android.view.View; 4 | 5 | import chao.android.tools.service_pools.R; 6 | import chao.android.tools.service_pools.event.MyEvent; 7 | import chao.app.ami.Ami; 8 | import chao.app.ami.UI; 9 | import chao.app.ami.annotations.LayoutID; 10 | import chao.app.ami.base.AMISupportFragment; 11 | import chao.java.tools.servicepool.ServicePool; 12 | import chao.java.tools.servicepool.annotation.Event; 13 | 14 | /** 15 | * @author luqin 16 | * @since 2019-08-27 17 | */ 18 | @LayoutID(R.layout.main) 19 | public class EventFragment extends AMISupportFragment implements MyEvent { 20 | 21 | @Event 22 | private MyEvent myEvent; 23 | 24 | 25 | public EventFragment() { 26 | } 27 | 28 | @Override 29 | public void setupView(View layout) { 30 | myEvent.postEvent(); 31 | 32 | layout.findViewById(R.id.btn).setOnClickListener(v->{ 33 | UI.show(getActivity(), EventFragment.class); 34 | }); 35 | } 36 | 37 | @Override 38 | public void postEvent() { 39 | System.out.println("post event in EventFragment."); 40 | } 41 | 42 | 43 | public class InnerEvent implements MyEvent { 44 | 45 | @Override 46 | public void postEvent() { 47 | System.out.println("post event in EventFragment inner."); 48 | } 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/fragments/HisEventFragment.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.fragments; 2 | 3 | import android.view.View; 4 | 5 | import chao.android.tools.service_pools.R; 6 | import chao.android.tools.service_pools.event.HisEvent; 7 | import chao.app.ami.annotations.LayoutID; 8 | import chao.app.ami.base.AMISupportFragment; 9 | import chao.java.tools.servicepool.annotation.Event; 10 | 11 | /** 12 | * @author luqin 13 | * @since 2019-08-29 14 | */ 15 | @LayoutID(R.layout.main) 16 | public class HisEventFragment extends AMISupportFragment { 17 | 18 | 19 | @Event 20 | private HisEvent hisEvent; 21 | 22 | @Override 23 | public void setupView(View layout) { 24 | hisEvent.postHisEvent(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/inherited/BaseInheritedActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.inherited; 2 | 3 | import chao.app.ami.base.AMIActivity; 4 | import chao.java.tools.servicepool.IService; 5 | import chao.java.tools.servicepool.annotation.Service; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2020-07-13 10 | */ 11 | @Service(inherited = true, priority = IService.Priority.MIN_PRIORITY) 12 | public abstract class BaseInheritedActivity extends AMIActivity implements IService { 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/inherited/InheritedInheritedActivity1.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.inherited; 2 | 3 | import android.os.Bundle; 4 | import android.os.PersistableBundle; 5 | 6 | /** 7 | * @author luqin 8 | * @since 2020-07-13 9 | */ 10 | public class InheritedInheritedActivity1 extends BaseInheritedActivity { 11 | 12 | @Override 13 | public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 14 | super.onCreate(savedInstanceState, persistentState); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/inherited/InheritedInheritedActivity11.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.inherited; 2 | 3 | import android.os.Bundle; 4 | import android.os.PersistableBundle; 5 | 6 | import chao.java.tools.servicepool.IService; 7 | import chao.java.tools.servicepool.annotation.Service; 8 | 9 | /** 10 | * @author luqin 11 | * @since 2020-07-13 12 | */ 13 | @Service(priority = IService.Priority.MAX_PRIORITY) 14 | public class InheritedInheritedActivity11 extends InheritedInheritedActivity1 { 15 | 16 | @Override 17 | public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 18 | super.onCreate(savedInstanceState, persistentState); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/inherited/InheritedInheritedActivity111.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.inherited; 2 | 3 | import android.os.Bundle; 4 | import android.os.PersistableBundle; 5 | 6 | /** 7 | * @author luqin 8 | * @since 2020-07-13 9 | */ 10 | public class InheritedInheritedActivity111 extends InheritedInheritedActivity11 { 11 | 12 | @Override 13 | public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) { 14 | super.onCreate(savedInstanceState, persistentState); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/inherited/InheritedInheritedActivity2.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.inherited; 2 | 3 | import android.app.Activity; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2020-07-13 8 | */ 9 | public class InheritedInheritedActivity2 extends Activity { 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/init/InitSampleActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.init; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.Nullable; 5 | 6 | import chao.android.tools.service_pools.R; 7 | import chao.android.tools.service_pools.test.InitService5; 8 | import chao.app.ami.annotations.LayoutID; 9 | import chao.app.ami.base.AMIActivity; 10 | import chao.java.tools.servicepool.annotation.Service; 11 | 12 | /** 13 | * @author luqin 14 | * @since 2019-09-30 15 | */ 16 | @LayoutID(R.layout.ami_home_layout) 17 | public class InitSampleActivity extends AMIActivity { 18 | 19 | @Service 20 | private InitService5 initService5; 21 | 22 | @Override 23 | public void onCreate(@Nullable Bundle savedInstanceState) { 24 | super.onCreate(savedInstanceState); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/init/Test.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.init; 2 | 3 | import chao.java.tools.servicepool.AbsInitServiceManager; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2019-09-17 8 | */ 9 | public class Test extends AbsInitServiceManager { 10 | 11 | public Test(){ 12 | addInitService(TestInitService.class); 13 | } 14 | 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/init/TestInitService.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.init; 2 | 3 | import chao.java.tools.servicepool.IInitService; 4 | import chao.java.tools.servicepool.annotation.Init; 5 | import chao.java.tools.servicepool.annotation.Service; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2019-09-17 10 | */ 11 | @Init(lazy = false) 12 | @Service 13 | public class TestInitService implements IInitService { 14 | @Override 15 | public void onInit() { 16 | System.out.println("lazy service inited."); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/init/TestLazyInitServicePriorityMax.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.init; 2 | 3 | import chao.java.tools.servicepool.IInitService; 4 | import chao.java.tools.servicepool.Sp; 5 | import chao.java.tools.servicepool.annotation.Init; 6 | import chao.java.tools.servicepool.annotation.Service; 7 | 8 | /** 9 | * @author luqin 10 | * @since 2019-09-17 11 | */ 12 | @Init(lazy = false, priority = Sp.MAX_PRIORITY) 13 | @Service 14 | public class TestLazyInitServicePriorityMax implements IInitService { 15 | @Override 16 | public void onInit() { 17 | System.out.println("max priority lazy service inited."); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/init/TestLazyInitServicePriorityMin.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.init; 2 | 3 | import chao.java.tools.servicepool.IInitService; 4 | import chao.java.tools.servicepool.Sp; 5 | import chao.java.tools.servicepool.annotation.Init; 6 | import chao.java.tools.servicepool.annotation.Service; 7 | 8 | /** 9 | * @author luqin 10 | * @since 2019-09-17 11 | */ 12 | @Init(lazy = false, priority = Sp.MIN_PRIORITY) 13 | @Service 14 | public class TestLazyInitServicePriorityMin implements IInitService { 15 | @Override 16 | public void onInit() { 17 | System.out.println("min priority lazy service inited."); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/init/TestLazyInitServicePriorityNormal.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.init; 2 | 3 | import chao.java.tools.servicepool.IInitService; 4 | import chao.java.tools.servicepool.Sp; 5 | import chao.java.tools.servicepool.annotation.Init; 6 | import chao.java.tools.servicepool.annotation.Service; 7 | 8 | /** 9 | * @author luqin 10 | * @since 2019-09-17 11 | */ 12 | @Init(lazy = false) 13 | @Service 14 | public class TestLazyInitServicePriorityNormal implements IInitService { 15 | @Override 16 | public void onInit() { 17 | System.out.println("normal lazy service inited."); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/path/IRepeat.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.path; 2 | 3 | /** 4 | * @author luqin 5 | * @since 2020-06-16 6 | */ 7 | public interface IRepeat { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/path/PathService.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.path; 2 | 3 | import chao.android.tools.service_pools.Printer; 4 | import chao.java.tools.servicepool.IService; 5 | import chao.java.tools.servicepool.annotation.Service; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2019-09-18 10 | */ 11 | @Service(path = "/app/path", scope = IService.Scope.global) 12 | public class PathService implements Printer, IService { 13 | 14 | public void print(){ 15 | System.out.println("this is a path service."); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/path/PathService2.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.path; 2 | 3 | import chao.android.tools.service_pools.Printer; 4 | import chao.java.tools.servicepool.IService; 5 | import chao.java.tools.servicepool.annotation.Service; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2019-09-18 10 | */ 11 | @Service(path = "/app/path2") 12 | public class PathService2 implements Printer, IService { 13 | 14 | public void print(){ 15 | System.out.println("this is a path service 2."); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/path/RepeatePathService.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.path; 2 | 3 | import android.util.Log; 4 | 5 | import chao.android.tools.service_pools.Printer; 6 | import chao.java.tools.servicepool.IService; 7 | import chao.java.tools.servicepool.annotation.Service; 8 | 9 | /** 10 | * @author luqin 11 | * @since 2020-06-16 12 | */ 13 | @Service(path = "/app/repeat") 14 | @Service(path = "/app/repeatable", scope = IService.Scope.global) 15 | public class RepeatePathService implements Printer,IRepeat { 16 | @Override 17 | public void print() { 18 | System.out.println("this is a repeat path service."); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/path/TestPathServices.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.path; 2 | 3 | import chao.java.tools.servicepool.PathServices; 4 | 5 | /** 6 | * @author luqin 7 | * @since 2019-09-18 8 | */ 9 | public class TestPathServices extends PathServices { 10 | 11 | public TestPathServices() { 12 | put("/app/path", PathService.class); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/AppRouters.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route; 2 | 3 | /** 4 | * @author luqin 5 | * @since 2019-09-03 6 | */ 7 | public interface AppRouters { 8 | 9 | void startActivity(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/RouteDefine.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route; 2 | 3 | import android.os.Bundle; 4 | 5 | /** 6 | * 7 | * 动画animation 8 | * 参数 9 | * path 10 | * Activity 11 | * 12 | * flag 13 | * 14 | * 15 | * 16 | * @author luqin 17 | * @since 2019-09-03 18 | */ 19 | public class RouteDefine { 20 | 21 | private int inAnim; 22 | 23 | private int outAnim; 24 | 25 | private String path; 26 | 27 | private int flag; 28 | 29 | private Bundle extras; 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/RouteField.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | /** 9 | * @author luqin 10 | * @since 2019-09-03 11 | */ 12 | @Target(ElementType.FIELD) 13 | @Retention(RetentionPolicy.CLASS) 14 | public @interface RouteField { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/TestRouteTargetActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route; 2 | 3 | import chao.android.tools.service_pools.R; 4 | import chao.app.ami.annotations.LayoutID; 5 | import chao.app.ami.base.AMIActivity; 6 | import chao.java.tools.servicepool.annotation.Service; 7 | 8 | /** 9 | * @author luqin 10 | * @since 2019-10-09 11 | */ 12 | @LayoutID(R.layout.empty) 13 | @Service(path = "/app/routeTarget") 14 | public class TestRouteTargetActivity extends AMIActivity { 15 | 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/interceptor/RouteContinueInterceptor5.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route.interceptor; 2 | 3 | import chao.android.tools.router.RouteBuilder; 4 | import chao.android.tools.router.RouteInterceptor; 5 | import chao.android.tools.router.RouteInterceptorCallback; 6 | import chao.app.ami.Ami; 7 | import chao.java.tools.servicepool.IService; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-10-09 13 | */ 14 | @Service(priority = 5, scope = IService.Scope.global) 15 | public class RouteContinueInterceptor5 implements RouteInterceptor { 16 | @Override 17 | public void intercept(RouteBuilder route, RouteInterceptorCallback callback) { 18 | Ami.log(route); 19 | callback.onContinue(route); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/interceptor/RouteExceptionInterceptor1.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route.interceptor; 2 | 3 | import chao.android.tools.router.RouteBuilder; 4 | import chao.android.tools.router.RouteInterceptor; 5 | import chao.android.tools.router.RouteInterceptorCallback; 6 | import chao.app.ami.Ami; 7 | import chao.java.tools.servicepool.IService; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-10-09 13 | */ 14 | @Service(priority = 1,scope = IService.Scope.global) 15 | public class RouteExceptionInterceptor1 implements RouteInterceptor { 16 | @Override 17 | public void intercept(RouteBuilder route, RouteInterceptorCallback callback) { 18 | Ami.log(route); 19 | if (route.extras.getInt("interceptor") == 2) { 20 | throw new RuntimeException("route interceptor err test."); 21 | } else { 22 | callback.onContinue(route); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/route/interceptor/RouteInterruptInterceptor4.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.route.interceptor; 2 | 3 | import chao.android.tools.router.RouteBuilder; 4 | import chao.android.tools.router.RouteInterceptor; 5 | import chao.android.tools.router.RouteInterceptorCallback; 6 | import chao.app.ami.Ami; 7 | import chao.java.tools.servicepool.IService; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-10-09 13 | */ 14 | @Service(priority = 4, scope = IService.Scope.global) 15 | public class RouteInterruptInterceptor4 implements RouteInterceptor { 16 | @Override 17 | public void intercept(RouteBuilder route, RouteInterceptorCallback callback) { 18 | Ami.log(route); 19 | if (route.extras.getInt("interceptor") == 1) { 20 | callback.onInterrupt(null); 21 | } else { 22 | callback.onContinue(route); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/router2/RouteApi.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.router2; 2 | 3 | import android.content.Intent; 4 | 5 | import java.io.Serializable; 6 | import java.util.ArrayList; 7 | 8 | import chao.android.tools.router.annotation.Route; 9 | import chao.android.tools.router.annotation.RouteParam; 10 | import chao.android.tools.service_pools.SimpleFragment; 11 | import chao.java.tools.servicepool.IService; 12 | 13 | /** 14 | * @author luqin 15 | * @since 2020-07-28 16 | */ 17 | public interface RouteApi extends IService { 18 | 19 | @Route(path = "/app/testRoute", 20 | flags = Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK, 21 | requestCode = 1 22 | ) 23 | void startTestRouterActivity( 24 | @RouteParam("int") int iv, 25 | @RouteParam("int[]") int[] liv, 26 | @RouteParam("boolean") boolean bv, 27 | @RouteParam("float") float fValue, 28 | @RouteParam("double") double dValue, 29 | @RouteParam("Integer") Integer Iv, 30 | @RouteParam("string") String sValue, 31 | @RouteParam("serializable") Serializable s, 32 | @RouteParam("slist")ArrayList slist, 33 | @RouteParam("simple") ArrayList containers 34 | ); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/rpc/TestService.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.rpc; 2 | 3 | import chao.android.tools.rpc.RemoteCallbackHandler; 4 | import chao.android.tools.service_pools.router2.RouteFragment; 5 | import chao.java.tools.servicepool.IService; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2020-08-03 10 | */ 11 | public interface TestService extends IService { 12 | void test(RemoteCallbackHandler callbackHandler); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/rpc/impl/LocalFirstServiceImpl.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.rpc.impl; 2 | 3 | import chao.app.remoteapi.LocalFirstService; 4 | import chao.java.tools.servicepool.annotation.Service; 5 | 6 | /** 7 | * @author luqin 8 | * @since 2020-07-27 9 | */ 10 | @Service 11 | public class LocalFirstServiceImpl implements LocalFirstService { 12 | @Override 13 | public int getInt() { 14 | return 55; 15 | } 16 | 17 | @Override 18 | public String getString() { 19 | return "local first"; 20 | } 21 | 22 | @Override 23 | public void function() { 24 | System.out.println("local first called!"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/sample/SimpleBaseActivity.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.sample; 2 | 3 | import android.os.Bundle; 4 | import androidx.annotation.Nullable; 5 | import androidx.appcompat.app.AppCompatActivity; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2020-01-09 10 | */ 11 | public class SimpleBaseActivity extends AppCompatActivity { 12 | 13 | @Override 14 | protected void onCreate(@Nullable Bundle savedInstanceState) { 15 | super.onCreate(savedInstanceState); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/serviceinterceptor/MinPriorityServiceInterceptor.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.serviceinterceptor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import chao.java.tools.servicepool.IService; 6 | import chao.java.tools.servicepool.IServiceInterceptor; 7 | import chao.java.tools.servicepool.IServiceInterceptorCallback; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | import static chao.java.tools.servicepool.ServicePool.logger; 11 | 12 | /** 13 | * @author luqin 14 | * @since 2020-07-12 15 | */ 16 | @Service(priority = IService.Priority.MIN_PRIORITY) 17 | public class MinPriorityServiceInterceptor implements IServiceInterceptor { 18 | @Override 19 | public void intercept(Class originClass, IService source, Method method, Object[] args, IServiceInterceptorCallback callback) { 20 | logger.log(source.toString() + ": " + method.getName()); 21 | if (method.getReturnType() == int.class) { 22 | callback.onInterrupt(10010); 23 | } else { 24 | callback.onContinue(method, args); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/serviceinterceptor/NormalServiceInterceptor.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.serviceinterceptor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import chao.java.tools.servicepool.IService; 6 | import chao.java.tools.servicepool.IServiceInterceptor; 7 | import chao.java.tools.servicepool.IServiceInterceptorCallback; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | import static chao.java.tools.servicepool.ServicePool.logger; 11 | 12 | /** 13 | * @author luqin 14 | * @since 2020-07-12 15 | */ 16 | @Service 17 | public class NormalServiceInterceptor implements IServiceInterceptor { 18 | 19 | @Override 20 | public void intercept(Class originClass, IService source, Method method, Object[] args, IServiceInterceptorCallback callback) { 21 | logger.log(method); 22 | callback.onContinue(method, args); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/serviceinterceptor/ServiceDirectReturnInterceptor.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.serviceinterceptor; 2 | 3 | import java.lang.reflect.Method; 4 | 5 | import chao.java.tools.servicepool.IService; 6 | import chao.java.tools.servicepool.IServiceInterceptor; 7 | import chao.java.tools.servicepool.IServiceInterceptorCallback; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2020-08-12 13 | */ 14 | @Service 15 | public class ServiceDirectReturnInterceptor implements IServiceInterceptor { 16 | @Override 17 | public void intercept(Class originClass, IService source, Method method, Object[] args, IServiceInterceptorCallback callback) { 18 | return; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/test/InitService1.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.test; 2 | 3 | import android.os.SystemClock; 4 | 5 | import chao.app.ami.Ami; 6 | import chao.java.tools.servicepool.IInitService; 7 | import chao.java.tools.servicepool.annotation.Service; 8 | 9 | /** 10 | * @author luqin 11 | * @since 2019-08-06 12 | */ 13 | @Service 14 | public class InitService1 implements IInitService { 15 | @Override 16 | public void onInit() { 17 | Ami.log(Thread.currentThread().getName() + " , " + Integer.toHexString(this.hashCode()) + ": init start."); 18 | SystemClock.sleep(1000); 19 | Ami.log(Thread.currentThread().getName() + " , " + Integer.toHexString(this.hashCode()) + ": init done."); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/test/InitService2.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.test; 2 | 3 | import android.os.SystemClock; 4 | 5 | import chao.app.ami.Ami; 6 | import chao.java.tools.servicepool.IInitService; 7 | import chao.java.tools.servicepool.Sp; 8 | import chao.java.tools.servicepool.annotation.Init; 9 | import chao.java.tools.servicepool.annotation.Service; 10 | 11 | /** 12 | * @author luqin 13 | * @since 2019-08-06 14 | */ 15 | @Init(dependencies = InitService1.class, priority = Sp.MAX_PRIORITY) 16 | @Service 17 | public class InitService2 implements IInitService { 18 | @Override 19 | public void onInit() { 20 | Ami.log("start"); 21 | 22 | SystemClock.sleep(1000); 23 | Ami.log("done"); 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/test/InitService3.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.test; 2 | 3 | import android.os.SystemClock; 4 | 5 | import chao.app.ami.Ami; 6 | import chao.java.tools.servicepool.IInitService; 7 | import chao.java.tools.servicepool.annotation.Init; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-08-06 13 | */ 14 | @Init(dependencies = {InitService1.class, InitService2.class}) 15 | @Service 16 | public class InitService3 implements IInitService { 17 | @Override 18 | public void onInit() { 19 | Ami.log("start"); 20 | SystemClock.sleep(1000); 21 | Ami.log("done"); 22 | 23 | } 24 | } 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/test/InitService4.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.test; 2 | 3 | import android.os.SystemClock; 4 | 5 | import chao.app.ami.Ami; 6 | import chao.java.tools.servicepool.IInitService; 7 | import chao.java.tools.servicepool.annotation.Init; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-08-06 13 | */ 14 | @Init(dependencies = {InitService1.class, InitService2.class}) 15 | @Service 16 | public class InitService4 implements IInitService { 17 | @Override 18 | public void onInit() { 19 | Ami.log("start"); 20 | SystemClock.sleep(1000); 21 | Ami.log("done"); 22 | 23 | } 24 | } 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/test/InitService5.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.test; 2 | 3 | import android.os.SystemClock; 4 | 5 | import chao.app.ami.Ami; 6 | import chao.java.tools.servicepool.IInitService; 7 | import chao.java.tools.servicepool.annotation.Init; 8 | import chao.java.tools.servicepool.annotation.Service; 9 | 10 | /** 11 | * @author luqin 12 | * @since 2019-08-06 13 | */ 14 | @Init(dependencies = {InitService4.class, InitService3.class}) 15 | @Service 16 | public class InitService5 implements IInitService { 17 | @Override 18 | public void onInit() { 19 | Ami.log("start"); 20 | SystemClock.sleep(1000); 21 | Ami.log("done"); 22 | } 23 | } 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/xxxxx/ASMServiceProxy.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.xxxxx; 2 | 3 | import java.util.ArrayList; 4 | 5 | import chao.android.tools.service_pools.test.InitService1; 6 | import chao.android.tools.service_pools.test.InitService2; 7 | import chao.android.tools.service_pools.test.InitService3; 8 | import chao.java.tools.servicepool.IInitService; 9 | import chao.java.tools.servicepool.ServiceProxy; 10 | 11 | /** 12 | * @author luqin 13 | * @since 2019-08-28 14 | */ 15 | public class ASMServiceProxy { 16 | 17 | static { 18 | System.out.println("this is a clinit method."); 19 | } 20 | 21 | private void newServiceProxy() { 22 | ArrayList> services = new ArrayList<>(); 23 | services.add(InitService1.class); 24 | services.add(InitService2.class); 25 | 26 | ServiceProxy proxy = new ServiceProxy<>(InitService3.class, null, 100, 200, false, true, services); 27 | 28 | ASMStaticClass clzz = new ASMStaticClass(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/xxxxx/ASMStaticClass.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.xxxxx; 2 | 3 | import chao.android.tools.service_pools.Printer; 4 | import chao.android.tools.service_pools.event.EventSample; 5 | import chao.java.tools.servicepool.annotation.Service; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2019-08-28 10 | */ 11 | public class ASMStaticClass { 12 | 13 | @Service 14 | private Printer sssssssprinter; 15 | 16 | // private static EventSample eventSample = new EventSample(); 17 | 18 | public ASMStaticClass() { 19 | 20 | } 21 | 22 | public ASMStaticClass(int i) { 23 | 24 | } 25 | 26 | 27 | public void printer() { 28 | // sssssssprinter.print(); 29 | } 30 | } 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/java/chao/android/tools/service_pools/xxxxx/ServiceProxyBean.java: -------------------------------------------------------------------------------- 1 | package chao.android.tools.service_pools.xxxxx; 2 | 3 | import java.util.List; 4 | 5 | import chao.java.tools.servicepool.IInitService; 6 | 7 | /** 8 | * @author luqin 9 | * @since 2019-08-28 10 | */ 11 | public class ServiceProxyBean { 12 | 13 | public List> services; 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout/device_info_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/empty.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/layout/init_sync_sample.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 |