android同时监听所有activity生命周期状态实现
android同时监听所有activity生命周期状态实现
梁大帅 发表于4年前
android同时监听所有activity生命周期状态实现
  • 发表于 4年前
  • 阅读 6078
  • 收藏 15
  • 点赞 0
  • 评论 3

移动开发云端新模式探索实践 >>>   

摘要: android4.0以上新增了一个ActivityLifecycleCallbacks,用于在测试环境下监控activity状态,现在apkplug也支持这个功能,但支持所有版本的系统,并且可以用于实际开发中,非常方便。

   在做应用统计时我们可能需要在获取activity的生命周期状态,以前的方式是我们需要重写每一个activity的onResume() 等函数然后埋点。现在可以利用apkplug框架的activitylifecycle将所有activity状态信息收集到一个类里面,进行统一的收集。

  demo代码下载地址 http://git.oschina.net/plug/apkplugBundles/tree/master/ActivityLifecycle

你可以通过apkplugdemo 本地安装的方式导入这个插件进行体验

apkplugdemo.apk 下载地址

ActivityLifecycle.apk   下载地址

效果图:

 

插件开发:

   1.按照apkplug插件开发的基本规则加入相应的osgi1.6.3.jar ,assets/plugin.xml配置文件 (activitylifecycle功能 需Bundle.1.6.3.jar以上 osgi1.6.3.jar才有) 

   2.编写Activity状态信息收集类  可以在这个类中将收集到的activity状态信息保持上或传递给统计工具   

public class BundleActivityLifecycleCallbacksImp implements BundleActivityLifecycleCallbacks{

	@Override
	public void onActivityCreated(Activity arg0, Bundle arg1) {
		System.out.println("Created:"+arg0.getClass().getCanonicalName());
		//保持信息到StringBuffer中 在MainActivity中显示
		ActivityLog.addLog("Created:"+arg0.getClass().getCanonicalName());
	}

	@Override
	public void onActivityDestroyed(Activity arg0) {
		System.out.println("Destroyed:"+arg0.getClass().getCanonicalName());
		ActivityLog.addLog("Destroyed:"+arg0.getClass().getCanonicalName());
	}


  3.在插件SimpleBundle implements BundleActivator 类中查询"org.apkplug.Bundle.RegActivityLifecycleCallbacks"服务(该服务框架启动时就注册了)
public void start(BundleContext context) throws Exception
    {
        //初始化activity监听器
        imp=new BundleActivityLifecycleCallbacksImp();
        ServiceReference ref  =  context.getServiceReference(RegActivityLifecycleCallbacks.class.getName());
        if  (ref  !=   null ) {
        	//查找到服务
        	RegActivityLifecycleCallbacks service  =  (RegActivityLifecycleCallbacks) context.getService(ref);
        	 if  (service  !=   null ) {
        		//将BundleActivityLifecycleCallbacksImp activity状态监听器注册到ActivityLifecycle管理器中
        		 service.registerActivityLifecycleCallbacks(imp);
        		 context.ungetService(ref);
        	 }
        }
    }

  4.以上步骤完成以后当插件启动以后就会注册一个监听其到框架中,然后就可以监听到activity的状态了

  5.显示activity状态信息

    MainActivity.java

  

@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		TextView log=(TextView) this.findViewById(R.id.log);
		log.setText(ActivityLog.getLog().toString());
	}

 

最终效果图如上。

官网www.apkplug.com

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 49
博文 45
码字总数 27883
作品 1
评论 (3)
霞女
地图对角线
你好
地图对角线
请问这个监控服务何时启动?如何手动启动和关闭?谢谢!
×
梁大帅
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: