数据埋点统计页面使用时长

数据埋点统计页⾯使⽤时长
感悟健康Android应⽤中的页⾯,也就Activity,Fragment两种。对于Activity,系统了全局的⽣命周期监听的⽅法,只需要在onResume中记录页⾯显⽰时的时间,在onPause中计算显⽰的时长,在onDestroy中将停留时长事件添加到数据库即可:
private Map<Context, Long> durationMap =new WeakHashMap<>();
private Map<Context, Long> resumeTimeMap =new WeakHashMap<>();
@Override
public void onActivityCreated(Activity activity, Bundle bundle){
durationMap.put(activity,0L);
}
@Override
宝宝论坛
public void onActivityResumed(Activity activity){
resumeTimeMap.put(activity, System.currentTimeMillis());
pengyouwang
}
@Override
public void onActivityPaused(Activity activity){
durationMap.put(activity, (activity)
+(System.currentTimeMillis()- (activity)));
}
@Override
public void onActivityDestroyed(Activity activity){
long duration = (activity);
if(duration >0){波特率
// 将事件添加到数据库
}
}
// 其他⽣命周期⽅法
});
⽽对于Fragment,虽然com.app包中的Fragment没有提供⽣命周期的全局监听,但25.1.0之后的v4包中提供了全局监听,考虑到通常情况下都使⽤v4包中的Fragment,所以这⾥就直接使⽤了v4包中提供的⽅法来实现页⾯停留时长的监听。
FragmentManager fm =getSupportFragmentManager();
private Map<Fragment, Long> resumeTimeMap =new WeakHashMap<>();
private Map<Fragment, Long> durationMap =new WeakHashMap<>();
@Override
public void onFragmentAttached(@NonNull FragmentManager fm,@NonNull Fragment f,@NonNull Context context){
resumeTimeMap.put(f,0L);
}
@Override
public void onFragmentResumed(@NonNull FragmentManager fm,@NonNull Fragment f){
resumeTimeMap.put(f, System.currentTimeMillis());
}
@Override
救灾捐赠管理办法
public void onFragmentPaused(@NonNull FragmentManager fm,@NonNull Fragment f){
durationMap.put(f, (f)+ System.currentTimeMillis()- (f));
}
@Override
public void onFragmentDetached(@NonNull FragmentManager fm,@NonNull Fragment f){
long duration = (f);
if(duration >0){
// 将事件添加到数据库
}
}
},true);
上⾯的代码只是对Fragment⽣命周期的监听,但Fragment的可见性与⽣命周期并不总是⼀⼀对应的,如:Fragment show/hide或者ViewPager中的Fragment在切换时⽣命周期中的⽅法并不总是执⾏的,所以还需要监听与这两种情况对应的onHiddenChanged和setUserVisibleHint,但这两个⽅v4包中提供的全局监听中并没有,所以还需要特殊处理⼀下。这⾥提供两种解决⽅案:党的性质和指导思想
提供⼀个LifycycleFragment, 对onHiddenChanged和setUserVisibleHint⽅法进⾏监听,业务层的Fragment继承此Fragment;
使⽤AOP,监听onHiddenChanged和setUserVisibleHint;
其中的处理逻辑与onResume和onPause中⼀致,具体参考后⾯的源码。
如果要对com.app包中的Fragment实现⽣命周期的全局监听,可采⽤以下两种⽅式:
写⼀个LifycycleFragment, 在其中实现⽣命周期的监听,业务层的Fragment实现时继承此Fragment;
使⽤透明的Fragment,透明的Fragment由于没有UI,其⽣命周期会与当前Fragment⽣命周期⼀致;
由于Fragment总是依赖于Activity存在的,所以其监听范围也是Activity级别的。在Activity的onCreate中对Fragment设置监听即可。

本文发布于:2024-09-22 08:26:49,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/526355.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:监听   全局   提供   包中   事件   没有   需要   添加
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议