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

前言

假设有以下路径

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

  • 1、查找首页的搜索酒店按钮的ID
    • XML布局中找到首页的搜索酒店按钮的ID:假设按钮的ID是 R.id.bt_search_hotel
  • 2、从首页Activity中查找按钮的点击事件
    • 假设你有一个点击事件处理器方法 onSearchHotelClick(View view),你可以在首页Activity中找到这个方法的实现
  • 3、进入下一个酒店列表页面Activity
    • 在点击事件处理方法中,启动酒店列表页面的Activity,示例参数值:
java 复制代码
Intent intent = new Intent(this, HotelListActivity.class);
startActivity(intent);
  • 4、若多个RecyclerView,需要找到RecyclerView的ID,并在适配器中处理点击事件
    • 在酒店列表页面的XML布局中找到RecyclerView的ID:假设RecyclerView的ID是 R.id.rvHotel。
    • 在适配器中处理点击事件,示例参数值
java 复制代码
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中找到预定按钮的点击事件处理方法,示例参数值
java 复制代码
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:

arduino 复制代码
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:
java 复制代码
   allprojects {
      repositories {
         ...
         maven { url 'https://jitpack.io' }
      }
   }
  • Step 2. Add the dependency
java 复制代码
   dependencies {
          implementation 'com.github.Peakmain:AsmActualCombat:1.1.5'
   }

新版本添加方式

settings.gradle

java 复制代码
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文件

java 复制代码
plugins {
    //插件依赖和版本
    id "io.github.peakmain" version "1.1.4" apply false
}

sdk版本依赖

java 复制代码
implementation 'com.github.Peakmain:AsmActualCombat:1.1.5'

使用

我们只需要在application的时候调用以下即可

java 复制代码
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类名功能,还可以拦截隐私方法调用的拦截哦。
  • 如果大家觉得项目或者文章对你有一点点作用,欢迎点赞收藏哦,非常感谢
相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui