Android官方架构组件介绍之应用(四)
讲一个项目常见的功能,友盟统计功能
例如一个项目有很多多modlue,每个里面modlue都有Activity,Activity需要友盟统一,Fragment也需要友盟统计。一般做法就是继承一个BaseActivity,BaseFragment。
然后在BaseActivity,BaseFragment大概是这样的
import android.support.v7.app.AppCompatActivity; public class BaseActivity extends AppCompatActivity { @Override
protected void onStart() {
super.onStart();
MobclickAgent.onPageStart(getPageName(this));
} @Override
protected void onStop() {
super.onStop();
MobclickAgent.onPageEnd(getPageName(this));
}
}
但是如果你们代码,引入了其他的AAR代码,他们aar里面有Activity,但是你也该不了别人代码,但是你们需要统计他们Activity,这个时候怎么办?
public class ActivityLifecycleMonitorCallback implements Application.ActivityLifecycleCallbacks {
private static final boolean DEBUG = AppEnv.bAppdebug;
private static final String TAG = DEBUG ? "ActivityLifecyMonitor" : ActivityLifecyMonitor.class.getSimpleName(); @Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivityCreated activity="+activity.hashCode());
}
} @Override
public void onActivityStarted(Activity activity) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivityStarted");
}
MobclickAgent.onPageStart(getPageName(activity)); } @Override
public void onActivityResumed(Activity activity) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivityResumed");
}
MobclickAgent.onResume(activity);
} @Override
public void onActivityPaused(Activity activity) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivityPaused");
}
MobclickAgent.onPause(activity);
} @Override
public void onActivityStopped(Activity activity) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivityStopped");
}
MobclickAgent.onPageEnd(getPageName(activity));
} @Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivitySaveInstanceState");
}
} @Override
public void onActivityDestroyed(Activity activity) {
if (DEBUG) {
Log.i(TAG, getPageName(activity) + " onActivityDestroyed activity="+activity.hashCode());
}
} private String getPageName(Activity activity) {
return activity.getClass().getName();
} }
然后在Application里面注册
private void registerActivityLifecycleCallback(Application application) {
ActivityLifecycleMonitorCallback activityLifecycleMonitor = new ActivityLifecycleMonitorCallback();
application.registerActivityLifecycleCallbacks(activityLifecycleMonitor);
}
Android官方架构组件介绍之应用(四)的更多相关文章
- Android官方架构组件介绍之LifeCycle(一)
Android官方架构组件介绍之LifeCycle 下面是官方提供的Android App开发的架构图: 从上图可以看到一些关键字:ViewModel,LiveData,Room等.其实看了上面视频的 ...
- Android官方架构组件介绍之LifeCycle
Google 2017 I/O开发者大会于近日召开,在开发者大会上谷歌除了发布了Android O等一些新产品之外,也对Android代码的架构做出了一个官方的回应. Google 2017 I/O开 ...
- Android官方架构组件介绍之ViewModel
ViewModel 像Activity,Fragment这类应用组件都有自己的生命周期并且是被Android的Framework所管理的.Framework可能会根据用户的一些操作和设备的状态对Act ...
- Android官方架构组件介绍之LiveData
LiveData LiveData是一个用于持有数据并支持数据可被监听(观察).和传统的观察者模式中的被观察者不一样,LiveData是一个生命周期感知组件,因此观察者可以指定某一个LifeCycle ...
- Android官方架构组件介绍之ViewModel(三)
ViewModel 像Activity,Fragment这类应用组件都有自己的生命周期并且是被Android的Framework所管理的.Framework可能会根据用户的一些操作和设备的状态对Act ...
- Android官方架构组件介绍之LiveData(二)
LiveData LiveData是一个用于持有数据并支持数据可被监听(观察).和传统的观察者模式中的被观察者不一样,LiveData是一个生命周期感知组件,因此观察者可以指定某一个LifeCycle ...
- 改造 Android 官方架构组件 ViewModel
前言 Android 官方架构组件在今年 5 月份 Google I/O 大会上被公布, 直到 11 月份一直都是测试版, 由于工作比较繁忙, 期间我只是看过类似的文章, 但没有在实际项目中使用过, ...
- Android官方架构组件指南
此指南适用于那些曾经或现在进行Android应用的基础开发,并希望了解和学习编写Android程序的最佳实践和架构.通过学习来构建强大的生产级别的应用. 注意:此指南默认你对Android开发有比较深 ...
- Android系统架构说明介绍
Android系统架构说明介绍 Android系统架构和一些普遍的操作系统差不多,都是采用了分层的架构,从他们之间的架构图看,Android系统架构分为四个层,从高层到低层分别是应用程序层.应用程序框 ...
随机推荐
- CLRInjection - 通用托管注入(超级灰色按钮克星升级版)
通用托管注入 - CLRInjection CLR软件系列第二发: 通用托管注入 - CLRInjection 软件简介:这款软件可以将任意托管DLL用插件的形式,注入到正在运行中的.net托管程序集 ...
- Spark 1.4.1中Beeline使用的gc overhead limit exceeded
最近使用SparkSQL做数据的打平操作,就是把多个表的数据经过关联操作导入到一个表中,这样数据查询的过程中就不需要在多个表中查询了,在数据量大的情况下,这样大大提高了查询效率. 我启动了thri ...
- 操作系统--UNIX代码段和数据段分开
(1)代码段:代码段是用来存放可执行文件的操作指令,也就是说是它是可执行程序在内存中的镜像.代码段需要防止在运行时被非法修改,所以只准许读取操作,而不允许写入(修改)操作----它是不可写的. (2) ...
- 动态横向(水平)合并GridView数据行DataRow的列
前一段时间,Insus.NET有写过<动态合并GridView数据行DataRow的列>http://www.cnblogs.com/insus/p/3238348.html, 那是纵向( ...
- [hdu 2604] Queuing 递推 矩阵快速幂
Problem Description Queues and Priority Queues are data structures which are known to most computer ...
- c++语言的学习笔记代码与笔记注释《函数部分》
具体的笔记以注释的形式写在代码内,每个知识点用函数的形式表现. #include <iostream>; #include<cmath> const double PI=3.1 ...
- 智能合约安全事故回顾(2)-BEC溢出攻击
讲溢出攻击之前,先给大家讲个故事:2014年的时候,美国的宾夕法尼亚州的某个小镇上发生了一个乌龙事件,征兵系统对一万多名1893年到1897出生的男子发去信函,要求他们注册参军,否则面临罚款和监禁.收 ...
- 洛谷P1973 [NOI2011]Noi嘉年华(决策单调性)
传送门 鉴于FlashHu大佬讲的这么好(而且我根本不会)我就不再讲一遍了->传送 //minamoto #include<iostream> #include<cstdio& ...
- Windows Server 2016 IIS10安装URLRewrite 2.0组件方法
1,打开Regedit> HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ InetStp2,编辑“MajorVersion”并以十进制设置数值数据值为93 ...
- 快速找出故障机器(single number)
简单起见,假设每个机器存储一个标号为ID的记录(ID是小于十亿的整数),假设每份数据都保存两个备份,这样就有两个机器储存了同样的数据. 1.在某个时间,如果得到一个数据文件ID的列表,是否能够快速地找 ...