注册

Android一秒带你定位当前页面Activity

前言


假设有以下路径


image.png
在过去开发时,我们在点击多层页面的后,想知道当前页面的类名是什么,以上图下单页面为例,我们首先



  • 1、查找首页的搜索酒店按钮的ID

    • XML布局中找到首页的搜索酒店按钮的ID:假设按钮的ID是 R.id.bt_search_hotel


  • 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
    • 在适配器中处理点击事件,示例参数值



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中找到预定按钮的点击事件处理方法,示例参数值



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);
}
});

上面我们发现存在两个问题:



  1. 在定位Activity这个过程中可能会消耗大量的时间和精力,特别是在页面层级较深或者页面结构较为复杂的情况下。
  2. 我们点击某个属性的时候,有时候想知道当前属性的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;

}
});

随后我们点击按钮在控制台便可以看到效果



  • 页面埋点

image.png



  • 点击埋点

image.png


总结



  • 是不是很简单呢,只需要简单配置即可1s实现定位当前页面Activity的类名是什么,不需要再花费大量的时间去查找当前页面的类名。
  • 当然,AsmActualCombat项目不仅仅可以实现全埋点、定位当前Activity类名功能,还可以拦截隐私方法调用的拦截哦。
  • 如果大家觉得项目或者文章对你有一点点作用,欢迎点赞收藏哦,非常感谢

作者:peakmain9
来源:juejin.cn/post/7289047550741397564

0 个评论

要回复文章请先登录注册