在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称(OpenSource Name):fengzhizi715/SAF-AOP开源软件地址(OpenSource Url):https://github.com/fengzhizi715/SAF-AOP开源编程语言(OpenSource Language):Java 100.0%开源软件介绍(OpenSource Introduction):SAF-AOP基于 Aspecj 实现的 Android AOP 框架,并使用沪江的gradle 插件:https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx 下载安装在根目录下的build.gradle中添加 buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.4'
}
} 在app 模块目录下的build.gradle中添加 apply plugin: 'com.hujiang.android-aspectjx'
...
dependencies {
compile 'com.safframework:saf-aop:1.3.0'
...
} 基于aspectj的AOP,无需使用耗费性能的反射.不过,需要在build.gradle中配置一下aspectj
@Async的使用方法: @Async
private void useAsync() {
Log.e(TAG, " thread=" + Thread.currentThread().getId());
Log.e(TAG, "ui thread=" + Looper.getMainLooper().getThread().getId());
} @Cacheable的使用方法: @Cacheable(key = "user")
private User initData() {
User user = new User();
user.userName = "tony";
user.password = "123456";
return user;
} 这里的@Cacheable,实际上用到Cache,要获取Cache也很简单. @Trace的使用方法: @Trace
@Async
private void loadUser() {
Log.e(TAG, " thread=" + Thread.currentThread().getId());
Log.e(TAG, "ui thread=" + Looper.getMainLooper().getThread().getId());
Cache cache = Cache.get(this);
User user = (User) cache.getObject("user");
Toast.makeText(MainActivity.this, SAFUtils.printObject(user), Toast.LENGTH_SHORT).show();
} 将@Trace和@Async两个注解结合使用,可以看到调用loadUser()方法花费的时间. 05-18 14:31:31.229 21190-21190/app.magicwindow.cn.testsaf I/MainActivity: MainActivity=loadUser() take [1ms]
05-18 14:31:31.231 21190-22033/app.magicwindow.cn.testsaf E/com.test.saf.activity.MainActivity: thread=14876
05-18 14:31:31.231 21190-22033/app.magicwindow.cn.testsaf E/com.test.saf.activity.MainActivity: ui thread=1 @Trace还支持在匿名内部类中使用 @Trace
private void initData() {
Observable.create(new ObservableOnSubscribe<String>() {
@Trace
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("111");
e.onNext("222");
e.onNext("333");
}
}).subscribe(new Consumer<String>() {
@Trace
@Override
public void accept(@NonNull String str) throws Exception {
}
});
} @HookMethod的使用方法:不写beforeMethod和afterMethod,则相当于没有使用@HookMethod @HookMethod(beforeMethod="dosthbeforeMethod",afterMethod="dosthafterMethod")
void doSomething() {
} @HookMethod 同样支持在匿名内部类中使用 @HookMethod(beforeMethod = "method1",afterMethod = "method2")
private void initData() {
L.i("initData()");
}
private void method1() {
L.i("method1() is called before initData()");
}
private void method2() {
L.i("method2() is called after initData()");
}
private void testRx() {
Observable.just("tony")
.subscribe(new Consumer<String>() {
@HookMethod(beforeMethod = "testRxBefore")
@Override
public void accept(@NonNull String s) throws Exception {
System.out.println("s="+s);
}
private void testRxBefore() {
L.i("testRxBefore() is called before accept()");
}
}); Proguard-keep class com.safframework.aop.** { *; } 联系方式Wechat:fengzhizi715 SAF-AOP相关文章: http://www.jianshu.com/p/9e78560cadad http://www.jianshu.com/p/2779e3bb1f14
ChangeLogLicense
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论