大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android界面上的空间被用户点击,需要记录下点击控件的名称并保存此信息。
创新互联是一家专业提供文成企业网站建设,专注与成都网站设计、网站制作、H5页面制作、小程序制作等业务。10年已为文成众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。
Android界面被打开或关闭,也需要记录此信息
最好能自动化完成,不需要修改大量代码,最好能定制
设计思路大体如下:
设计一个基类BaseActivity,它是继承自Activity,但是覆写了Activity的几个方法(后面会详细说明)。
利用广播来统一管理用户行为的Log信息。
数据积累到一定量,将用户行为数据发送到后台服务器。
BaseActivity基类的设计
利用Android事件分发机制,我们自定义的基类BaseActivity继承自Activity并重写Activity的dispatchTouchEvent方法(为什么要这么做?还请参考我的上一篇博客),以及重写Activity的所有生命周期方法。
重写Activity的生命周期以及事件分发方法
重写Activity生命周期的onStart()和onStop(){或者onDestory,这个根据自己的选择确定},来完成对界面开启和关闭的埋点记录。事件分发方法来检测ACTION_UP这个事件(也就是手指触动触摸屏抬起的那个事件),二者通过本地广播,将onStart或onStop这些事件广播出来并被接收处理。
1 public class BaseActivity extends Activity {
2 protected void onStart(){
3 super.onStart();
4 // 使用本地广播,高效更安全
5 LoacalBroadcastManager bcManager = LocalBroadcastManager.getInstance(this);
6 Intent intent = new Intent(ACTIVITY_START);//自定义的ACTIVITY_START
7 bcManager.sendBroadcast(intent);
8 }
9 protected void onStop(){
10 super.onStop();
11 LoacalBroadcastManager bcManager = LocalBroadcastManager.getInstance(this);
12 Intent intent = new Intent(ACTIVITY_STOP);//自定义的ACTIVITY_STOP
13 bcManager.sendBroadcast(intent);
14 }
15 //.......可扩展
16 protected boolean dispatchTouchEvent(MotionEvent e){
17 if (e.getAction() == MotionEvent.ACTION_UP){
18 LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this);
19 Intent intent = new Intent(VIEW_CLICK);
20 intent.putExtra(VIEW_CLICK, e);
21 broadcastManager.sendBroadcast(intent);
22 }
23 }
wireshark截包条件是要求包一定要过你截包机器的网口,这个要求 1)包是跟你机器通讯的 或者 2)是hub或者是有镜像口的交换机 另外,由于很多机器有一些虚拟的网卡,你要选择需要能够截到包的网卡。然后,除非是发送给你的,要打开混杂模式, 还有,要保证winpcap驱动正常工作。如果还不能截包,问题就麻烦了。 没什么详细步骤的,你对截包的原理了解了,自然知道问题在哪里了。
一个好的产品离不开数据分析,在手机 APP 中,数据分析极致化需要细致到某个时刻列表曝光的了哪几个 Item。
2022 年了,基本上目前 Android 上可以滑动的复杂列表都是 RecyclerView 或者其扩展,这里分享一个封装的思路。
如果非要细化细节:
各种方案核心都差不多,最关键的就是通过 LayoutManager 获取屏幕内第一个可见和最后一个可见 item position,上报其区间内的 Item。这里简称这个逻辑为 检查上报逻辑 。
但是触发时机有所不同,通常如下方案一和二所述,当然除了方案一和方案二外,还有一些别的方案,比如监听 RecyclerView 的布局树变化触发 检查上报逻辑 等方案。
可以发现方案二相比方案一更有利于减少各种回调的注册和周期的控制,下文会在方案二的基础上,阐述用法和相关实现思路。
仓库地址: RecyclerViewExposure
这里会主要说明一些主要逻辑,需要完整的逻辑可以 fork 仓库 查看
思路来自于 lifecycle 的设计,这里主要是想让 Activity/Fragment 提供可见和不可见的状态变化给外部订阅
对 List Item 的收集处理是 RecyclerViewExposure 最核心的收集数据逻辑,这里针对在 Activity 的使用作为例子。上文已经讲述如何做一个 PageLifeCycleHolder 为其他组件提供页面可见状态,下文将直接使用。