实时天气数据随车而动:移动式车载气象站的优势 SDK 功能介绍_全域采集与增长分析(Quick Tracking)
实时天气数据随车而动:移动式车载气象站的优势 SDK 功能介绍_全域采集与增长分析(Quick Tracking),
实时天气数据随车而动:移动式车载气象站的优势
JD-CZ5移动式车载气象站是一种将气象监测设备集成于车辆中的先进技术。这种设备能够在行驶过程中实时收集和分析天气数据,具有以下显著优势:
1. 实时数据获取
车载气象站能够实时采集温度、湿度、气压、风速、风向等气象数据。与固定气象站相比,车载气象站的移动性使其能够覆盖更广泛的区域和多样的地理环境。这种即时的数据采集能力对于天气变化较快或恶劣天气条件下的应急响应至关重要。
2. 动态监测与预警
由于车载气象站随车移动,能够在不同的地理位置和气象条件下进行动态监测。这种实时监测功能能够及时捕捉气象变化并生成预警。例如,在山区行驶时,车载气象站能够检测到突发的降雨或风速变化,为驾驶员提供及时的安全提醒,减少事故发生的风险。
3. 提高决策效率
对于运输、物流及农业等行业,实时天气数据对决策过程具有重要影响。车载气象站能够提供实时数据支持,帮助相关行业做出更加科学和高效的决策。例如,物流公司可以根据实时气象数据调整运输路线,避免恶劣天气影响;农业生产者可以根据天气情况调整施肥和灌溉计划,提高生产效率。
4. 精准的气象数据分析
车载气象站通常配备先进的传感器和数据处理系统,能够提供精准的气象数据。通过高精度的传感器,车载气象站能够在车行过程中进行数据校准和修正,提高数据的准确性。精确的数据分析可以帮助用户更好地理解天气变化趋势,从而制定有效的应对策略。
5. 多场景应用
车载气象站适用于多种应用场景,包括:
应急管理:在自然灾害(如洪水、台风等)发生时,车载气象站能够提供实时数据支持,帮助应急部门进行现场决策和救援行动。
气象科研:科研人员可以使用车载气象站进行移动数据采集,研究天气变化对不同地理环境的影响,丰富气象学研究数据。
旅游与探险:在进行旅游或探险活动时,车载气象站能够提供实时气象信息,帮助规划行程和保障安全。
6. 提高数据覆盖率
相比于固定气象站,车载气象站可以覆盖更多的地理区域。固定气象站通常只能监测特定区域的天气情况,而车载气象站能够在行驶过程中跨越不同的地理区域,实现数据覆盖的扩展。这种广泛的覆盖能力能够帮助构建更加全面的气象数据网络,提高天气预报的准确性。
7. 增强用户体验
对于驾驶员和乘客,车载气象站提供的实时天气信息不仅能够提升行车安全性,还能增强出行体验。用户能够实时了解当前天气条件,避免因天气变化带来的不适或安全隐患,提升出行的舒适度和安全性。
综上所述,移动式车载气象站通过实时数据获取、动态监测、精准分析和多场景应用,显著提升了气象数据的使用价值。这种设备不仅为各类用户提供了可靠的天气信息支持,也为相关行业的决策提供了重要的数据参考。随着技术的不断进步,车载气象站将发挥越来越重要的作用,为社会提供更高效、更精准的气象服务。
SDK 功能介绍_全域采集与增长分析(Quick Tracking)
准备阶段
重要
在使用与验证前请务必仔细确认您已经根据基础集成文档正确集成性能体验SDK。为了方便您进一步验证相关功能,请将SDK内的Log打开。详细参考基础集成文档中日志打印部分
1. 基础使用
崩溃异常采集
如您完成统计SDK和性能体验SDK的接入,即可使用Java异常、Native崩溃异常、ANR异常自动采集功能
如果您使用我们的SDK捕获native崩溃后,其他捕获工具将无法捕获到native 崩溃,可以使用如下方法在初始化SDK后进行设置,使其他SDK可以捕获到native 崩溃。
import com.uc.crashsdk.export.CrashApi
...
final Bundle customInfo = new Bundle();
("mCallNativeDefaultHandler",true);
().updateCustomInfo(customInfo);
崩溃回调(自定义字段)
当崩溃发生时,您可以在该回调方法中返回string类型的业务自定义数据,该数据会写入到崩溃文件中并上传到服务器展示。注意:崩溃回调中返回string类型数据的长度限制为256个字符。
接口示例:
import com.umeng.umcrash.UMCrash
...
UMCrash.registerUMCrashCallback(new UMCrashCallback(){
@Override
public String onCallback(){
return"崩溃时register的自定义内容字符串";
}
});
上传后即可在管理平台 性能监控-崩溃分析-错误详情-自定义字段 中查看到回调信息
自定义异常
如果开发者自己捕获了错误,需要手动上传到【QuickTracking】服务器进行分析可以调用下面两种方法:
方法一:
publicstaticvoid (Throwable e,String type)
示例:
try{
// 抛出异常的代码
} catch(Exception e){
(e,"Custom Exception");
}
方法二:
publicstaticvoid (String e,String type)
示例:
使用自定义错误,查看时请在错误列表页面选择【自定义异常】
卡顿异常采集
采集卡顿异常无法做额外配置,默认为开启,如果您需要关闭此采集功能,请参考开关与采样配置文档
安卓卡顿分析默认的值为超过2秒计为卡顿,如果您需要设置不同的阈值,可以通过下方的API进行设置,API和示例如下:
import com.umeng.umefs.UMEfs
...
/** 设置卡顿阈值的API是通过(Bundle bundle)方法设置,
* bundle对象中传入对应的key为,
* 对应的值为您设置的卡顿的阈值 *
**/
Bundle bundle = new Bundle();
(, 2000L);//设置卡顿阈值为2000L
(bundle);
说明
注意: 需要在初始化之前设置,阈值限制为大于0且小于等于4,如传入的阈值为非法值(负数或大于4),SDK默认取值2秒设置阈值;
内存异常采集
内存采集支持采集OOM异常和内存占用指标。
OOM异常是崩溃分析的子集,因此不单独提供开关配置,是否采集OOM与是否采集崩溃异常同步,如您需要关闭某类崩溃,可通过【管理后台】-【性能体验】- 【配置管理】-【开关与采样配置】调整。
内存占用,需要接入APM SDK .0.0010_guomi及以上版本,并建议搭配最新版本统计分析SDK接入, 如您不希望采集内存占用相关指标,可通过调整配置进行关闭。如下图所示:
网络监控
说明
此操作仅代表手动集成网络监控的方法适用范围
目前网络监控仅支持监控OkHttp网络请求 ,并且需要手动设置eventListenerFactory和NetworkInterceptor
需要使用OkHttp的最低版本是3.1
.1 集成方式
集成网络监控即需要您手动将网络监控 SDK 相关 API 预埋到您项目工程的OkHttp中。
设置eventListenerFactory和NetworkInterceptor。
在您构建OkHttpClient时,通过OkHttp的eventListenerFactory方法和addNetworkInterceptor方法分别设置事件监听器和拦截器,示例如下:
OkHttpClient okHttpClient = ()
//设置事件监听器,()为SDK API
.eventListenerFactory(())
//设置拦截器,new OkHttpInterceptor()为SDK API
.addNetworkInterceptor(new OkHttpInterceptor())
.build();
启动监控
启动监控用于监控、还原C端用户启动您App时的真实感知情况。分类如下:
启动类型
启动场景
流程分解
监控指标
首次启动
App安装后的第一次启动
初始化时长、构建时长、页面加载时长
Application的attachbaseContext()开始到第一个Activity的onResume()结束
冷启动
App进程被"杀死"(包括手动方式、被动系统回收等),再次触发启动的过程
初始化时长、构建时长、页面加载时长
Application的attachbaseContext()开始到第一个Activity的onResume()结束
热启动
App进程存活,再次触发启动的过程(包括前后台切换、back退出再次进入等)
启动时长
如果退出时的Activity存在则从恢复该Activity的onRestart()开始到onResume()结束,如果退出时的Activity不存在则从Activity的onCreate()开始到onResume()结束。
.1 集成方式
说明
集成方式主要包括手动集成和自动集成(即编译插件集成)两种
原理说明:
启动监控的触发时机与说明如图
手动集成:
说明
手动集成启动监控,需要您主动将启动监控模块相关 API 预埋到您项目工程中
使用方法
您可以在Application生命周期添加LaunchManager.onTraceApp(this, "参数2", 参数3);和在Activity生命周期中添加LaunchManager.onTracePage(this, "参数2", 参数3);来使其生效
其中:
参数
参数名
参数类型
参数说明
param1
context
Context
ApplicationContext,或者ActivityContext
param2
methodName
String
填写当前参数
param3
isBegin
boolean
是否开始计时
填写规则的说明如下:
添加地点
填写参数2
填写参数3
添加时机
Application
LaunchManager.APP_ATTACH_BASE_CONTEXT
true
Application 的 attachBaseContext()方法开始
LaunchManager.APP_ATTACH_BASE_CONTEXT
false
Application 的 attachBaseContext()方法结束
LaunchManager.APP_ON_CREATE
false
Application 的 onCreate()方法结束
Activity
LaunchManager.PAGE_ON_CREATE
true
Activity 的 onCreate()方法开始
LaunchManager.PAGE_ON_RE_START
true
Activity 的 onRestart()方法开始
LaunchManager.PAGE_ON_START
true
Activity 的 onStart()方法开始
LaunchManager.PAGE_ON_RESUME
false
Activity 的 onResume()结束
LaunchManager.PAGE_ON_STOP
true
Activity 的 onStop()方法开始
代码示例如下:
import com.efs.sdk.launch.LaunchManager
...
// Application部分
public class TestApplication extends Application {
@Override
protected void attachBaseContext(Context base) {
(this, LaunchManager.APP_ATTACH_BASE_CONTEXT, true);
(base);
...
(this, LaunchManager.APP_ATTACH_BASE_CONTEXT, false);
}
@Override
public void onCreate() {
();
...
(this, LaunchManager.APP_ON_CREATE, false);
}
}
// Activity部分
public class TestActivity extends Activity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
(savedInstanceState);
...
(this, LaunchManager.PAGE_ON_CREATE, true);
}
@Override
protected void onRestart() {
(this, LaunchManager.PAGE_ON_RE_START, true);
();
}
@Override
protected void onStart() {
(this, LaunchManager.PAGE_ON_START, true);
();
...
}
@Override
protected void onResume() {
();
...
(this, LaunchManager.PAGE_ON_CREATE, false);
}
@Override
protected void onStop() {
(this, LaunchManager.PAGE_ON_STOP, true);
();
}
}
自动集成
说明
您也可以添加APM Gradle插件来自动完成应用启动监控过程的埋点
依赖插件
打开您工程根目录的,在dependencies中添加如下:
classpath ""
注意:确保您已在工程根目录的中添加Maven地址。
示例如下:
buildscript {
repositories {
//配置 阿里云镜像 maven地址
maven { setUrl("") }
google()
jcenter()
}
dependencies {
//引入apm性能分析插件
classpath ''
}
}
...
allprojects {
repositories {
//配置 阿里云镜像 maven地址
maven { setUrl("") }
google()
jcenter()
}
}
配置插件
打开您App的添加使用插件,在文件头添加代码如下:
apply plugin: ''
同时添加插件的相关配置,代码如下:
efs {
//是否对启动过程进程插桩的开关,如果使用自动集成监控则必须开启,false则不开启启动插件
enable = true
//白名单,支持包力度,必须填写,如填写自己应用的包名
whiteList = [
"", // 如需要针对test目录下所有的Activity进行自动
"" // 针对work目录下的WorkActivity进行监听
]
//黑名单,支持包力度,必须填写,如填写自己应用的包名
blackList = [
"" // work下的所有Activity都不需要监听
]
}
重要
注意: 白名单的判断优先级是高于黑名单的,如果有个白名单Activity在黑名单包目录下,则会正常监听
完整示例:
如何确认插件是否正确集成:
编译时查看编译中的Log搜索关键字EfsPluginTracer,出现下列关键字,即代表集成自动采集插件
[INFO][EfsPluginTransform]begin efs transform.
[INFO][EfsPluginTracer]dir need trace file is
如下图所示:
.2 自定义启动阶段数据
说明
如果您想在启动监控过程中加入自定义的监控阶段,比如初始化业务数据(initData)、初始化页面组件(initView)等,您可以使用自定义启动阶段API加入您自定义的启动阶段数据。
重要
1、自定义启动阶段只支持冷启动阶段,热启动不支持
2、如果自定义启动阶段超过SDK所定义的启动结束时间点(即Activity生命周期中的 onResume方法被),则会被SDK丢弃
您可以通过在启动前后添加LaunchManager.onTraceBegin和LaunchManager.onTraceEnd来实现自定义启动阶段上报
警告
注意:LaunchManager.onTraceBegin和LaunchManager.onTraceEnd 方法必须配套使用,否则会被SDK上报丢弃
方法
在您自定义阶段开始处添加如:
注:自定义阶段key长度不可以超过10个字符
/**
* 参数1:上下文
* 参数2:自定义阶段key,需要和onTraceEnd配对使用
* 参数3:时间戳
*/
(context, "自定义阶段key_1", ());
在您自定义阶段结束处添加和如下API:
注:自定义阶段key长度不可以超过10个字符
/**
* 参数1:上下文
* 参数2:自定义阶段key,需要和onTraceBgin配对使用
* 参数3:时间戳
*/
(context, "自定义阶段key_1", ());
代码示例:
//监控initData()方法在启动阶段的耗时
(, "initData", ());
initData();
(, "initData", ());
结果验证
集成完成启动App,过滤,可以看到如下启动数据发送成功相关信息,即表示启动数据成功上报。
1.7 APP应用内H5页面的APM功能
集成QuickTracking JS SDK的网页在嵌入到App后,JS SDK采集到的数据可以通过App端上传到服务器,该功能默认关闭。如果开启,需要在每一个webview loadUrl前调用如下方法:
import com.efs.sdk.h5pagesdk.H5Manager
...
//以下方法仅支持APM SDK Android .0.001及以上版本
(webView);
("");
重要
在API 16及以下版本中,注入JavaScript有安全漏洞,请谨慎使用。
嵌入到App中的H5页面集成APM SDK后需要设置App应用包名白名单,桥接场景下H5不需要设置收数域名。
详情参考性能体验Web SDK接入
原生页面
.1自动集成
说明
原生页面的自动集成与启动监控的自动集成一致,参考启动监控-依赖插件章节进行插件依赖的添加即可自动集成
.2 自定义页面阶段数据
如果您想在页面监控过程中加入自定义的监控阶段,比如初始化业务数据(initData)、初始化页面组件(initView)等,您可以使用自定义页面阶段API加入您自定义的页面阶段数据。
在您自定义阶段开始处添加如下API: 注:
1、自定义阶段key长度不可以超过10个字符;
2、key的名称不能以"UM_"开头;
3、单个页面使用上限为6个,超出则过滤。
import com.umeng.pagesdk.PageManger
在您自定义阶段开始处添加如下API
/**
* 参数1: 当前activity对象
* 参数2: 自定义阶段key,需要和onTracePageEnd配对使用
*/
(, "initView");
在您自定义阶段结束处添加如下API:
/**
* 参数1: 当前activity对象
* 参数2: 自定义阶段key,需要和onTracePageBegin配对使用
*/
(, "initView");
代码示例:
import com.umeng.pagesdk.PageManger
public class TestActivity extends Activity {
...
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
(savedInstanceState);
//监控initView()方法在页面阶段的耗时
(, "initView");
initView(); // 业务方初始化逻辑
(, "initView");
}
...
}
2. 高级功能
采集开关
说明
注:您在产品管理平台中「开关与采样配置」中设置的开关和采样率优先级高于在SDK中设置的开关,SDK会间隔8小时同步是否有开关和采样配置更新的请求
本采集开关适用于开发者在不想使用某个APM SDK监控模块时灵活自定义采集范围。如目前提供功能都需要采集,则不需要使用该开关,如需要调整某个模块,可按照下面bundle控制说明,选择key进行设置。
import com.umeng.umcrash.UMCrash
import com.umeng.umefs.UMEfs
...
/**
* 通过Bundle中指定的key和key的value值(boolean类型)来控制该key对应APM模块的关闭
*/
(Bundle args)
//用于控制
//
//
(Bundle args)
//用于控制
//
//
//
//
//GE
Bundle控制说明:
key
说明
开关级别
用于关闭java crash捕获,默认为true可设置为false进行关闭
二级
用于关闭native crash捕获,默认为true可设置为false进行关闭
二级
用于关闭ANR捕获,默认为true可设置为false进行关闭
一级
UMEfs.KEY_ENABLE_PA
用于关闭卡顿捕获,默认为true可设置为false进行关闭
一级
用于关闭启动捕获,默认为true可设置为false进行关闭
一级
用于关闭内存占用捕获,默认为true可设置为false进行关闭
一级
用于关闭网络分析捕获,默认为true可设置为false进行关闭
一级
用于关闭App与H5打通开关,默认为true可设置为false进行关闭
一级
UMEfs.KEY_ENABLE_PAGE
用于关闭Page开关,默认为true可设置为false进行关闭
一级
用于关闭日志回捞开关,默认为true可设置为false进行关闭
一级
代码示例如下:
(true);
Bundle bundle = new Bundle();
(, true);
(, true);
(, false);
(, false);
(, false);
(, false);
(, false);
(, false);
(bundle);
(bundle)
(this,"您的appkey","应用商店名称",, "");
说明
1、由于启动监控早于SDK初始化,所以彻底去掉启动监控还需关闭插件插桩或去掉手动API埋点。
2、卡顿开关关闭情况下不会对卡顿模块进行初始化,并输出如下日志内容:enablePaLog is false 。
3、启动开关关闭情况下不会对卡顿模块进行初始化,并输出如下日志内容:enableLaunchLog is false 。
4、内存开关关闭情况下不会对内存模块进行初始化,并输出如下日志内容:enableMemLog is false 。
5、日志回捞关闭情况下不会对日志回捞模块进行初始化,并输出如下日志内容:enable codeLog is false 。
符号表
2. 什么是符号表
符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:
<起始地址> <结束地址> <函数> [<文件名:行号>]
为了能快速并准确地定位用户APP发生Crash的代码位置,我们使用符号表对APP发生Crash的程序堆栈进行解析和还原。因此在使用APM SDK还原时需要先上传符号表!
.2 为什么要上传符号表
为了能快速并准确地定位用户APP发生Crash的代码位置,使用符号表对APP发生Crash的程序堆栈进行解析和还原。
举一个例子,解析前:
解析后:
管理平台-性能体验-配置管理处提供了手动上传符号表功能如下图:
.3 Android 打包符号表方式
Java 符号表
需要将多个mapping文件请自行处理追加到一个文件中,最终命名为,并打包成zip文件,如果需要同时包含so符号,可以把so文件打包在一起。(具体结构可参考下面符号文件建议示例)
Android so库
保证符号表的so文件与发布的so文件同名,so压缩前最大支持400M;如果一个版本里包含同文件名,不同架构的so,可以压缩到不同的目录中,反符号化时需要通过buildid去关联;建议编译时使用-g参数,带上debug信息,崩溃堆栈可以解析到代码行级,实际发布时,再使用strip命令去掉调试信息;如果不带debug信息,则只能定位到函数名级下列情况下,需要so文件带有buildid
不同CPU架构的so文件名一样,放在不同的路径下
同一个应用版本里,可能有多个版本的so库,使用了动态加载的技术如何生成带buildid的so,请检查编译参数,确保没有带”—build-id=none”,如果还是没有buildid,可以添加编译参数”ld_flags += -Wl,--build-id=sha1”可通过file命令检查so文件是否带buildid,调试信息
符号文件建议示例:
如果您是使用CMake编译的项目,那么so文件在工程中的位置为:
<项目文件夹>/
mapping文件的位置:
<项目文件夹>
版本选择
当前支持现有版本列表和手动输入两种方式:
如果是已经有错误上报到APM后台的版本,可以直接在上传符号表时的版本下拉框中选择
如果是即将发布的新版本,支持手动输入版本号,请输入与新版本完全一致的内容,并点击‘添加版本号‘即可手动添加
.4 手动上传方式
按照文档说明将符号表文件压缩到一起:查看【符号文件建议示例】
登录平台,进入【性能体验】-【配置管理】
点击符号表管理 ,点击上传符号表文件,将第一步压缩好的符号表文件上传即可
已经上传的符号表可以在符号表管理页面进行查看
当前支持上传方式:后台手动上传(最大支持400M)
设置HTTP接口API
您可以通过调用来设置http接口
//isHttpsProtocol默认为true,为false则SDK本地默认发送HTTP请求
(boolean isHttpsProtocol);
接口说明:
该接口仅影响UAPM 性能部分发送请求,UMCrash模块不受该API控制;
该接口需要在初始化SDK之前设置;
用户可通过该接口修改SDK本地是以HTTP头发送还是HTTPS头发送,默认SDK是以HTTPS头发送,并且可以通过云控配置动态下发修改,并且云控下发会覆盖该接口的设置;
通过setCustomDomainEfs接口传入的域名中的HTTP或HTTPS头接口内会自动切掉,以SDK默认值(HTTPS头)或setRequestProtocol接口或云控决定SDK使用HTTP或HTTPS。
日志回捞
.1 设置回捞标识
您可以通过如下接口设置回捞标识:
Bundle bundle = new Bundle();
//设置回捞标识为android0911
bundle.putString(, "android0911");
(bundle);
注意:
该设置必须在初始化SDK之前完成,运行时不可再次设置
回捞标识不能为空,且长度不能超过128
如果不设置回捞标识,默认以UMID作为标识回捞
..2 日志记录
您可以通过如下接口完成相关日志的记录:
import com.umeng.logsdk.ULog;
...
("日志TAG", "日志内容");
("日志TAG", "日志内容");
("日志TAG", "日志内容");
("日志TAG", "日志内容");
("日志TAG", "日志内容");
注意:
共提供五种日志等级,包括:v/d/i/w/e
参数1为日志的TAG,不能为空或长度超过64,参数2为日志的内容,不能为空或长度超过1024
务必使用「import com.umeng.logsdk.ULog;」类下的等方法,且必须要在初始化SDK之后调用。如果使用「」将不生效
.3 日志策略
日志持久化存储上限为5MB,当达到上限时则仅保留最近7天的日志,如果最近7天日志达到上限则不再继续存储日志
触发日志持久化存储:
. 前后台切换;
. 缓存数据达到上限则进行持久化日志存储
当回捞任务下发到本地,并成功加载后,则进行回捞任务和本地日志的匹配,匹配到的日志开始上传,当前进程正在产生的日志需要下次启动后匹配任务继续上传
.4 日志排查
日志回捞模块开启,输出如下日志:
enable codeLog is true
正确读取并加载日志任务,输出如下日志:
09-13 14:56:28.988 15994-15994/ I/ULogConfigManager: [log register] begin. 09-13 14:56:29.704 15994-15994/ I/ULogConfigManager: [log register] call back config. 09-13 14:56:29.709 15994-15994/ I/ULogConfigManager: [log register] save did is 9560fe0f75e7c92fff351d537633a91cia 09-13 14:56:29.709 15994-15994/ I/ULogConfigManager: [log register] save uid is android0911 09-13 14:56:29.710 15994-15994/ I/ULogConfigM
- 300斤棕熊偷吃粮食被卡进塑料桶 网友:救援时人和熊都害怕极了 救命!我在海边被“塑料袋”蛰了!
- Arla携手索地雅,全球两大乳业巨头合作,加码中国奶粉市场野心彰显 断奶期如何养护体质弱的宝宝?口粮可在奶粉排行榜十强中选
- 快消品头部品牌如何设计“营销数字化平台”? 快消品头部品牌如何设计“营销数字化平台”?|crm|erp
- 打通情绪这堵墙 知名心理专家开讲“教师如何做好情绪管理” 名校MBA卖老酒:6年开8店、询价小程序涨粉20万+,他如何做到?
- 社交巨头微信:面对即时零售,为何如此 “小心翼翼”? 大品牌彰显强实力,ZCAR竹子买车引领汽车新零售未来
- 孩子梦想做“网红”,该担忧吗? 生产工单系统如何帮助企业控制成本?
- 中华美食之旅:探寻阿胶黄芪奶粉的香醇诱惑 盛健羊乳全产业链布局助力品质升级,高钙羊奶粉引领行业新风向
- 青春期亲子关系问题如何解决?成都这个圆桌论坛上医生和心理专家都来“支招” 观察财政政策将如何做好“接力”?