前言
假定有以下路径
在过去开发时,咱们在点击多层页面的后,想知道当时页面的类名是什么,以上图下单页面为例,咱们首要
- 1、查找主页的查找酒店按钮的ID
- XML布局中找到主页的查找酒店按钮的ID:假定按钮的ID是
R.id.bt_search_hotel
- XML布局中找到主页的查找酒店按钮的ID:假定按钮的ID是
- 2、从主页Activity中查找按钮的点击事情
- 假定你有一个点击事情处理器办法
onSearchHotelClick(View view)
,你能够在主页Activity中找到这个办法的完成
- 假定你有一个点击事情处理器办法
- 3、进入下一个酒店列表页面Activity
- 在点击事情处理办法中,发动酒店列表页面的Activity,示例参数值:
Intent intent = new Intent(this, HotelListActivity.class);
startActivity(intent);
- 4、若多个RecyclerView,需要找到RecyclerView的ID,并在适配器中处理点击事情
- 在酒店列表页面的XML布局中找到RecyclerView的ID:假定RecyclerView的ID是
R.id.rvHotel
。 - 在适配器中处理点击事情,示例参数值
- 在酒店列表页面的XML布局中找到RecyclerView的ID:假定RecyclerView的ID是
rvHotel.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// 处理点击事情,发动酒店详情页面的Activity
Intent intent = new Intent(context, HotelDetailActivity.class);
intent.putExtra("hotel_id", hotelList.get(position).getId());
startActivity(intent);
}
});
- 在酒店详情页面中找到XML中预订按钮的ID,并处理点击事情:
- 在酒店详情页面的XML布局中找到预订按钮的ID:假定按钮的ID是
R.id.stv_book
- 在详情页面Activity中找到预订按钮的点击事情处理办法,示例参数值
- 在酒店详情页面的XML布局中找到预订按钮的ID:假定按钮的ID是
Button bookButton = findViewById(R.id.bookButton);
bookButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 处理点击事情,发动下单页面的Activity
Intent intent = new Intent(DetailActivity.this, OrderActivity.class);
startActivity(intent);
}
});
上面咱们发现存在两个问题:
- 在定位Activity这个过程中可能会消耗很多的时刻和精力,特别是在页面层级较深或许页面结构较为复杂的情况下。
- 咱们点击某个特点的时分,有时分想知道当时特点的id是什么,然后去做一些逻辑或许赋值等,咱们只能去找布局,如果布局层次深,又会糟蹋很多的时刻去定位特点
如果咱们能够在1s
快速精确地获取当时Activity的类名,那么在项目开发过程中将起到关键性作用,节省了很多时刻,减少了开发中的冗余工作。开发人员的开发流程将更加高效,能更专心于事务逻辑和功用完成,而不用花费过多时刻在页面和特点定位上
为什么要完成一秒定位当时页面Activity
- 优化了Android应用程序的性能,完成了快速的页面定位,将当时Activity的定位时刻从秒级缩短至仅1秒
- 提高了开发功率,答应团队快速切换页面和快速查找当时页面的类名,减少了不必要的开发时刻糟蹋
- 这一优化对项目推进产生了明显影响,提高了整体开发流程的高效性,使咱们能够更专心于事务逻辑的完成和功用开发
运用的库是:AsmActualCombat
- AsmActual利用ASM技术将合规插件会侵入到编译流程中, 插件会把App中所有系统敏感API或特点替换为SDK的收口办法 , 然后解决直接运用系统办法时面对的隐私合规问题
AsmActualCombat库的运用
运用文档链接:github.com/Peakmain/As…
How To
旧版别增加方法
ASM插件依靠 Add it in your root build.gradle at the end of repositories:
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "io.github.peakmain:plugin:1.1.4"
}
}
apply plugin: "com.peakmain.plugin"
阻拦事情sdk的依靠
- Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
- Step 2. Add the dependency
dependencies {
implementation 'com.github.Peakmain:AsmActualCombat:1.1.5'
}
新版别增加方法
settings.gradle
pluginManagement {
repositories {
//插件依靠
maven {
url "https://plugins.gradle.org/m2/"
}
}
}
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
//sdk仓库
maven { url 'https://jitpack.io' }
}
}
插件依靠
根目录下的build.gradle文件
plugins {
//插件依靠和版别
id "io.github.peakmain" version "1.1.4" apply false
}
sdk版别依靠
implementation 'com.github.Peakmain:AsmActualCombat:1.1.5'
运用
咱们只需要在application的时分调用以下即可
SensorsDataAPI.init(this);
SensorsDataAPI.getInstance().setOnUploadSensorsDataListener((state, data) -> {
switch (state) {
case SensorsDataConstants.APP_START_EVENT_STATE:
//$AppStart事情
case SensorsDataConstants.APP_END__EVENT_STATE:
//$AppViewScreen事情
break;
case SensorsDataConstants.APP_VIEW_SCREEN__EVENT_STATE:
if (BuildConfig.DEBUG) {
Log.e("TAG", data);
}
StatisticsUtils.statisticsViewHeader(
GsonUtils.getGson().fromJson(data, SensorsEventBean.class));
break;
case SensorsDataConstants.APP_VIEW_CLICK__EVENT_STATE:
if (BuildConfig.DEBUG) {
Log.e("TAG", data);
}
SensorsEventBean sensorsEventBean =
GsonUtils.getGson().fromJson(data, SensorsEventBean.class);
StatisticsUtils.statisticsClickHeader(sensorsEventBean);
break;
default:
break;
}
});
随后咱们点击按钮在控制台便能够看到作用
- 页面埋点
- 点击埋点
总结
- 是不是很简单呢,只需要简单配置即可1s完成定位当时页面Activity的类名是什么,不需要再花费很多的时刻去查找当时页面的类名。
- 当然,AsmActualCombat项目不仅仅能够完成全埋点、定位当时Activity类名功用,还能够阻拦隐私办法调用的阻拦哦。
- 如果大家觉得项目或许文章对你有一点点作用,欢迎点赞收藏哦,非常感谢