2024年Android最全安卓埋点策略+Retrofit上传埋点数据_android 埋点上报,2024年最新15个经典面试问题及回答思路视频

最后

今天关于面试的分享就到这里,还是那句话,有些东西你不仅要懂,而且要能够很好地表达出来,能够让面试官认可你的理解,例如Handler机制,这个是面试必问之题。有些晦涩的点,或许它只活在面试当中,实际工作当中你压根不会用到它,但是你要知道它是什么东西。

最后在这里小编分享一份自己收录整理上述技术体系图相关的几十套腾讯、头条、阿里、美团等公司19年的面试题,把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分。

还有 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

**Android精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

public static final String EVENT_BUTTON_CLICK = "button_click";
// 其他事件定义...

// 获取页面访问事件
public static TrackEvent getPageViewEvent(String pageName) {
    TrackEvent event = new TrackEvent(EVENT_PAGE_VIEW);
    event.addProperty("page_name", pageName);
    // 其他属性...
    return event;
}

// 获取按钮点击事件
public static TrackEvent getButtonClickEvent(String buttonName) {
    TrackEvent event = new TrackEvent(EVENT_BUTTON_CLICK);
    event.addProperty("button_name", buttonName);
    // 其他属性...
    return event;
}

// 其他事件获取方法...

}


### 定义埋点事件的实体类,包含事件类型、属性等信息



public class TrackEvent {
private String eventType;
private Map<String, Object> properties;

public TrackEvent(String eventType) {
    this.eventType = eventType;
    this.properties = new HashMap<>();
}

public String getEventType() {
    return eventType;
}

public void addProperty(String key, Object value) {
    properties.put(key, value);
}

public Map<String, Object> getProperties() {
    return properties;
}

}


### 使用Retrofit框架上传埋点数据到对应路径


1.添加 Retrofit 依赖到项目的 build.gradle 文件中:



implementation ‘com.squareup.retrofit2:retrofit:2.x.x’
implementation ‘com.squareup.retrofit2:converter-gson:2.x.x’ // 如果要使用 Gson 解析器


2.创建 Retrofit 实例并定义 API 接口:



public interface TrackApiService {
@POST(“/track”)
Call sendTrackEvent(@Body TrackEvent event);
}


3.修改 TrackManager 类,使用 Retrofit 发送网络请求:



public class TrackManager {
private static final String API_ENDPOINT = “https://your-api-endpoint.com”;
private static TrackManager instance;
private Context context;
private TrackApiService apiService;

private TrackManager(Context context) {
    this.context = context.getApplicationContext();

    // 创建 Retrofit 实例
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(API_ENDPOINT)
            .addConverterFactory(GsonConverterFactory.create()) // 使用 Gson 解析器
            .build();

    // 创建 API Service
    apiService = retrofit.create(TrackApiService.class);
}

public static synchronized TrackManager getInstance(Context context) {
    if (instance == null) {
        instance = new TrackManager(context);
    }
    return instance;
}

public void trackEvent(TrackEvent event) {
    // 发送网络请求
    Call<Void> call = apiService.sendTrackEvent(event);
    call.enqueue(new Callback<Void>() {
        @Override
        public void onResponse(Call<Void> call, Response<Void> response) {
            // 处理服务器响应...
        }

        @Override
        public void onFailure(Call<Void> call, Throwable t) {
            // 处理请求失败...
        }
    });
}

}


4.解释下上面的代码中有关Retrofit中的注解和上面我们定义的接口TrackApiService 在 Retrofit 中,`TrackApiService` 是一个接口,用于定义网络请求的方法。`@POST("/track")` 是一个注解,表示发送 POST 请求到指定的路径 “/track”。


`@Body TrackEvent event` 是另一个注解,用于指定请求体的内容。它告诉 Retrofit 将 `TrackEvent` 对象作为请求体发送给服务器。


具体解释如下:


* `@POST("/track")`:表示将使用 POST 方法发送请求到路径 “/track”。这个路径是你的 API 后端定义的接收埋点事件的路径。
* `Call<Void>`:表示 Retrofit 将返回一个 `Call` 对象,用于异步执行网络请求并处理响应。`Void` 表示响应的主体内容为空。
* `sendTrackEvent(@Body TrackEvent event)`:这是一个方法定义,用于发送埋点事件。`@Body` 注解表示将 `TrackEvent` 对象作为请求体发送。`TrackEvent` 是你定义的类,包含了发送给服务器的埋点事件数据。


综合起来,`TrackApiService` 接口中的 `sendTrackEvent` 方法定义了一个发送埋点事件的请求,通过 POST 方法发送到指定路径,并将 `TrackEvent` 对象作为请求体发送给服务器。


你可以根据实际需求修改这个接口,添加其他请求方法和参数,以适应你的埋点需求。




---


在 Retrofit 中,`@Body` 注解用于将对象作为请求体发送给服务器。这意味着你可以将任何 Java 类的实例作为请求体发送出去,不限于特定的类或数据类型。


当你使用 `@Body` 注解时,Retrofit 将会自动将指定的对象序列化为请求体的格式,例如 JSON 或者其他格式。然后,它将使用适当的请求头信息将请求发送到服务器。


因此,你可以创建自己的 Java 类,用于表示需要发送的数据,并将其作为请求体发送给服务器。这样,你可以根据实际需求定义和发送不同类型的数据。


请确保在使用 `@Body` 注解时,服务器能够正确地解析和处理请求体的格式。通常,你需要在服务器端进行相应的处理和解析,以确保能够正确地接收和处理你发送的 Java 对象。


**注:,Retrofit 会动态地创建接口的实现类,你无需手动编写实现类。当你使用 Retrofit 创建接口的实例时,它会在运行时生成一个代理类来处理实际的网络请求。因此,你不需要手动实现 `TrackApiService` 接口中的方法。**


## 使用异步或者同步请求


使用 `enqueue` 方法是一种常见的异步执行网络请求的方式,它会在后台线程执行网络请求,并在请求完成后回调相应的方法。


Retrofit 支持同步和异步的网络请求方式。如果你希望使用同步请求,可以使用 `execute` 方法来执行请求,但需要注意的是,在 Android 主线程上执行网络请求会导致阻塞,可能会引起 ANR(Application Not Responding)错误,因此建议在后台线程中执行同步请求。


关于接口是异步还是同步的,一般情况下是由接口的定义和服务端的实现决定的。通常,网络请求都会以异步方式执行,以避免阻塞主线程。在 Retrofit 中,默认情况下,接口的方法会被当作异步请求进行处理,需要使用 `enqueue` 方法来执行异步请求。


如果你想要执行同步请求,可以在 Retrofit 创建时设置合适的执行器(Executor),以控制请求的执行方式。例如,可以使用 `OkHttp` 客户端来创建 Retrofit 实例,并设置自定义的执行器来执行同步请求。



// 创建 OkHttpClient 实例
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.build();

// 创建 Retrofit 实例,并指定 OkHttp 客户端
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(“https://api.example.com”)
.addConverterFactory(GsonConverterFactory.create())
.client(okHttpClient) // 设置自定义的 OkHttpClient
.build();

// 创建 TrackApiService 实例
TrackApiService trackApiService = retrofit.create(TrackApiService.class);

// 创建同步请求执行器
ExecutorService executor = Executors.newSingleThreadExecutor();

// 执行同步请求

最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的24套腾讯、字节跳动、阿里、百度2020-2021面试真题解析,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节

还有 高级架构技术进阶脑图、Android开发面试专题资料 帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。

一线互联网面试专题

379页的Android进阶知识大全

379页的Android进阶知识大全

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

术体系对大家有一个方向参考。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值