前言

假定有以下路径

Android一秒带你定位当前页面Activity
在过去开发时,咱们在点击多层页面的后,想知道当时页面的类名是什么,以上图下单页面为例,咱们首要

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

随后咱们点击按钮在控制台便能够看到作用

  • 页面埋点

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

  • 点击埋点

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

总结

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