Android 全埋点解决方案 (2):全埋点概述 1.1

阅读数:5 2019 年 11 月 30 日 22:55

Android全埋点解决方案(2):全埋点概述 1.1

(Android View 类型)

内容简介
这是一本实战为导向的、翔实的 Android 全埋点技术与解决方案手册,是国内知名大数据公司神策数据在该领域多年实践经验的总结。由神策数据合肥研发中心负责人亲自执笔,他在 Android 领域有近 10 年研发经验,开发和维护着知名的商用开源 Android & iOS 数据埋点 SDK。
本书详细阐述了 Android 全埋点的 8 种解决方案,涵盖各种场景,从 0 到 1 详解技术原理和实现步骤,并且提供完整的源代码,各级研发工程师均可借此实现全埋点数据采集,为市场解开全埋点的神秘面纱。
8 种 Android 全埋点解决方案包括:
AppClick 全埋点方案 1:代理 View.OnClickListener、
AppClick 全埋点方案 2:代理 Window.Callback
AppClick 全埋点方案 3:代理 View.AccessibilityDelegate
AppClick 全埋点方案 4:透明层
AppClick 全埋点方案 5:AspectJ
AppClick 全埋点方案 6:ASM
AppClick 全埋点方案 7:Javassist
AppClick 全埋点方案 8:AST

在 Android 系统中,控件(View)的类型非常丰富。分类方式也是多种多样的。我们根据控件设置的监听器(listener)的不同,可以大致将控件分为如下几类。

  • Button、CheckedTextView、TextView、ImageButton、ImageView 等

为这些控件设置的 listener 均是 android.view.View.OnClickListener。

下面以 Button 为例:

复制代码
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//do something
}
});
  • SeekBar

SeekBar 设置的 listener 是 android.widget.SeekBar.OnSeekBarChangeListener,如:

复制代码
SeekBar seekBar = findViewById(R.id.seekBar);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
// do something
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// do something
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// do something
}
});
  • TabHost

TabHost 设置的 listener 是 android.widget.TabHost.OnTabChangeListener,如:

复制代码
TabHost tabHost = findViewById(R.id.tabhost);
tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {
@Override
public void onTabChanged(String tabName) {
//do something
}
});
  • RatingBar

RatingBar 设置的 listerner 是 android.widget.RatingBar.OnRatingBarChangeListener,如:

复制代码
RatingBar ratingBar = findViewById(R.id.ratingBar);
ratingBar.setOnRatingBarChangeListener(newRatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
//do something
}
});
  • CheckBox、SwitchCompat、RadioButton、ToggleButton、RadioGroup 等

这些 View 属于同一种类型,它们都是属于带有“状态”的按钮,它们设置的 listener 均是 CompoundButton.OnCheckedChangeListener。

下面以 CheckBox 为例:

复制代码
CheckBox checkBox = findViewById(R.id.checkbox);
checkBox.setOnCheckedChangeListener(newCompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
//do something
}
});
  • Spinner

Spinner 设置的 listener 是 android.widget.AdapterView.OnItemSelectedListener,如:

复制代码
Spinner spinner = findViewById(R.id.spinner);
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//do something
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
  • MenuItem

主要是通过重写 Activity 的相关方法(onOptionsItemSelected、onContextItemSelected)来设置 listener,如:

复制代码
// 选项菜单
@Override
public boolean onOptionsItemSelected(android.view.MenuItem) {
//do something
}
// 上下文菜单
@Override
public boolean onContextItemSelected(android.view.MenuItem) {
//do something
}
  • ListView、GridView

ListView 和 GridView 都是 AdapterView 的子类,显示的内容都是一个“集合”。它们设置的 listener 均是 android.widget.AdapterView.OnItemClickListener,如:

复制代码
ListView listView = findViewById(R.id.listView);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//do something
}
});
  • ExpandableListView

ExpandableListView 也是 AdapterView 的子类,同时也是 ListView 的子类。它的点击分为 ChildClick 和 GroupClick 两种情况,所以,它设置的 listener 也是分为两种情况,即:android.widget.ExpandableListView.OnChildClickListener 和 android.widget.ExpandableList-View.OnGroupClickListener,如:

复制代码
ExpandableListView listview = findViewById(R.id.expandablelistview);
//ChildClick
listview.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView expandableListView,
View view, int groupPosition, int childPosition, long id) {
//do something
return true;
}
});
//GroupClick
listview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView expandableListView,
View view, int childPosition, long id) {
//do something
return true;
}
});
  • Dialog

Dialog 设置的 listener 分为两种情况。对于常见的普通 Dialog,设置的 listener 是 android. content.DialogInterface.OnClickListener,如:

复制代码
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setPositiveButton(" 确定 ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do something
}
});

还有一种是显示列表的 Dialog,它设置的 listener 是 android.content.DialogInterface.OnMultiChoiceClickListener,如:

复制代码
AlertDialog.Builder builder = new AlertDialog.Builder(context);
DialogInterface.OnMultiChoiceClickListener mutiListener =
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int which, boolean isChecked) {
//do something
}
};

Android全埋点解决方案(2):全埋点概述 1.1

购书地址 https://item.jd.com/12574672.html?dist=jd

评论

发布