前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >面试题精选:Android埋点,减少对业务代码的入侵

面试题精选:Android埋点,减少对业务代码的入侵

作者头像
Android技术干货分享
发布于 2019-10-15 07:26:56
发布于 2019-10-15 07:26:56
93000
代码可运行
举报
文章被收录于专栏:Android技术分享Android技术分享
运行总次数:0
代码可运行

前言

前几天去参加了一场面试。面试的题目大多很基础,有一道关于埋点的问题,面试官问我如果不用第三方SDK进行埋点,自己埋点的话,如何减少埋点对业务代码的入侵。

当时没想太多,就说创建一个 BaseView 类,在这个类中进行埋点的操作,然后使需要进行埋点操作的 View 继承这个 Base 类。后来想想,这个方案其实存在很多问题,因为让每个需要埋点的 View 去继承 BaseView 类,说明 View 需要自定义,会耗费很多的时间和精力,对于自带的 Button 等控件的埋点,这种方法又无法实现。所以说,其实在这个问题上,我答的不是很好,但可能之前的几个问题答得不错,面试官也没说什么,就说行,然后继续问下面的问题。

对于埋点,减少业务代码入侵这个问题,我回来想了想,或许用代理模式来实现,会是一个很好的选择。

埋点

先来说说埋点的概念,埋点就是在用户使用APP时,对用户的操作行为进行记录,比如用户点击了一个 Button 然后跳转至了哪个界面,然后在这个界面上又点击了哪个控件,等等等一系列操作进行记录,然后APP将行为记录传至后台,这就是埋点。

利用这些信息,可以对用户进行数字画像,根据用户的行为特点,针对性地提供功能服务,以及对软件的优化等。现在市场上已经有很多第三方的埋点SDK,比如说友盟的用户行为数据检测。

这些第三方SDK,基本上不用对自己的业务代码进行改变,就可以进行埋点的操作,而如果我们自己来实现埋点的话,基本上的思路就是,在用户点击控件的时候,对用户这个行为进行记录,然后进行一些信息处理操作,代码来实现就是。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //埋点操作
                actionRecord();
                //跳转至另外一个界面
                startActivity(new Intent(mContext,AnotherActivity.class));
            }
        });

actionRecord() 里是一些埋点相关的操作,我们可以看到,这个操作已经入侵到了我们的业务代码中,埋的点如果少还好,如果有大量的点要埋,这种实现方式后期维护将变的十分困难,因此需要另外一种方法来实现。

我们考虑使用代理模式的方式,因为埋点的操作基本上是对用户的点击事件进行记录,所以我们可以创建一个 OnClickListener 的代理。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Created by chaochaowu on 2018/9/15.
 */

public class OnClickListenerProxy implements View.OnClickListener {

    private View.OnClickListener listener;

    public OnClickListenerProxy(View.OnClickListener listener) {
        this.listener = listener;
    }

    @Override
    public void onClick(View v) {
        //埋点操作
        actionRecord();
        //调用在业务代码中定义的 onClick 操作
        listener.onClick(v);
    }

    private void actionRecord(){
        //一些埋点的操作
    }
}

将埋点相关的操作全都放入这个代理类中,在业务代码中,调用如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 mButton.setOnClickListener(new OnClickListenerProxy(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //跳转至另外一个界面
                startActivity(new Intent(mContext,AnotherActivity.class));
            }
        }));

可以发现,业务代码中没有出现埋点相关的操作,我们由此减少了埋点操作对业务代码的入侵,埋点的操作交由代理类实现,如果我们需要对埋点操作进行修改,只要对代理类中的方法进行修改,而不需要去每个埋点的地方修改。

以上便是减少埋点对业务代码入侵的一种方式,不过,如果项目真的有埋点的需求,我会优先考虑使用第三方(逃。

最后

最后不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.10.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
简易理解设计模式之:观察者模式——监听与回调
Subject(抽象被观察者):抽象主题角色把所有观察者对象的引用保存在一个集合里,并提供可以增加和删除观察者的接口。
Twcat_tree
2022/11/29
7540
简易理解设计模式之:观察者模式——监听与回调
Android Hook 机制之简单实战
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gdutxiaoxu/article/details/81459830
程序员徐公
2018/09/17
3.1K0
Android Hook 机制之简单实战
浅谈Android编码规范及命名规范
前言:   目前工作负责两个医疗APP项目的开发,同时使用LeanCloud进行云端配合开发,完全单挑。   现大框架已经完成,正在进行细节模块上的开发   抽空总结一下Android项目的开发规范:1、编码规范 2、命名规范   注:个人经验,经供参考 -------------------------------------------------------------------------------------------------------------------------- 一、An
听着music睡
2018/05/18
1.4K0
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
【Android 插件化】插件化简介 ( 组件化与插件化 ) 【Android 插件化】插件化原理 ( JVM 内存数据 | 类加载流程 ) 【Android 插件化】插件化原理 ( 类加载器 )
韩曙亮
2023/03/29
9430
【Android 插件化】Hook 插件化框架 ( Hook Activity 启动过程 | 静态代理 )
笔记71 | Intent分享内容(文本,图片,视频)
在构建一个 intent时,必须指定这个intent需要触发的actions。Android定义了一些actions,比如 ACTION_SEND,该action表明该intent用于从一个activity发送数据到另外一个activity的,甚至可以是跨进程之间的数据发送。 为了发送数据到另外一个activity,我们只需要指定数据与数据的类型,系统会自动识别出能够兼容接受的这些数据的activity。如果这些选择有多个,则把这些activity显示给用户进行选择;如果只有一个,则立即启动该Activit
项勇
2018/06/19
1.7K0
自动注入方案
某按钮或模块点击事件统计或者是复杂行为统计。总的来说产品期望看到的统计数据是丰富而且能够尽量灵活满足多变需求,但app
ruochen
2021/11/23
1K0
拦截控件点击 - 巧用ASM处理防抖
我在链家网从事Android开发已经三年了,一直致力于优质APP的开发与探索,有时候会写一些小工具,但更多时候是用技术帮助业务增长。我们有专业的测试团队,我尝试与他们保持沟通,听取他们的建议和反馈,并及时的做出修正。
小鄧子
2018/08/20
1.4K0
拦截控件点击 - 巧用ASM处理防抖
关于Android大数据收集,埋点统计的详细讲解以及案例代码分析附github代码
关于Android大数据收集,埋点统计的详细讲解以及案例代码分析附github代码
全栈程序员站长
2022/08/30
5830
MVC、MVP、MVVM的理解与使用
对于MVC、MVP、MVVM,这都是Android开发的一种架构,随着日积月累的开发,很对人对这几种模式是再熟悉不过了。不过当初我在学习的时候是因为看一个开源项目的源码是MVP架构的,也找个很多文章,发现很多文章不是全是概念,就是解释的含糊不清,所以写一篇文章来分享,让像我一样的小白可以快速理解这几种架构模式。
g小志
2018/09/11
7070
MVC、MVP、MVVM的理解与使用
Android 全埋点解决方案
但也不是说全埋点就一定没有弊端,比如扩展性较差。 经过调研,实际上都是以全埋点为主、手动埋点为辅的情况,从而达到比较理想的埋点效果。
yechaoa
2022/06/10
8770
四年Android面试遇到的问题整理
以下问题的答案均是个人四年来学习实践中整理的,如有不同意见,欢迎斧正。 1.自定义Handler时如何避免内存泄漏
Android技术干货分享
2019/03/26
5740
APP可视化埋点原理大揭秘 顶
运营者能够对用户行为进行分析的前提,是对大量数据的掌握。在以往,这个数据通常是由开发者在控件点击、页面等事件中,一行行地编写埋点代码来完成数据收集的。然而传统的操作模式每当升级改版时,开发和测试人员就需要重复不断对代码进行更新,整个流程耗时长,无法满足业务的需求。
个推君
2019/12/24
1.5K0
android view事件分发机制_android事件分发流程图
PS一句:最终还是选择CSDN来整理发表这几年的知识点,该文章平行迁移到CSDN。因为CSDN也支持MarkDown语法了,牛逼啊!
全栈程序员站长
2022/09/30
6370
android view事件分发机制_android事件分发流程图
010android初级篇之Activity的返回值
使用startActivity方式启动的Activity和它的父Activity无关,当它关闭时也不会提供任何反馈。 但是使用startActivityForResult方式启动的Activity,可以传递返回值和数据给他的父进程。这种方式最适合用在一个Activity为其它的Activity提供数据(例如用户从一个列表中选择一个项目)的场合。
上善若水.夏
2018/09/28
9080
Android面试题精选:讲一讲 Android 的事件分发机制
基本会遵从 Activity => ViewGroup => View 的顺序进行事件分发,然后通过调用 onTouchEvent() 方法进行事件的处理。我们在项目中一般会对 MotionEvent.ACTION_DOWN,MotionEvent.ACTION_UP,MotionEvent.ACTION_MOVE,MotionEvent.ACTION_CANCEL 分情况进行操作。
Android技术干货分享
2019/10/08
1.1K0
Android面试题精选:讲一讲 Android 的事件分发机制
58无埋点数据采集技术在Android端实践
作为国内最大分类信息生活服务平台,58集团旗下各个产品都会投入大量人力进行用户行为的分析,来提升运营效率。但是各个产品对用户行为的分析需求基本是相似的。在这样的背景下,我们自研了WMDA 无埋点用户行为分析平台,并提供对PC、M、APP三端支持,帮助各个业务线更好的挖掘用户真实行为。
张磊BARON
2018/07/25
4.1K0
58无埋点数据采集技术在Android端实践
相关推荐
简易理解设计模式之:观察者模式——监听与回调
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文