如何获取当前Activity实例

之前在弄摇一摇屏幕截图的时候遇到过一个问题,要截取当前的页面就要拿到当前的Activity,通过:

	public Bitmap screenShot(Activity a){
		a.getWindow().getDecorView().setDrawingCacheEnabled(true);
		return a.getWindow().getDecorView().getDrawingCache();
	}

一般情况下,要拿到当前Activity很容易,在继承Activity的代码中一个this就行了。但是我的这个截图功能是在项目几乎完成时,临时添加的一个小功能。不大可能把源代码翻出来,分析每一个Activity,再加入截图1功能的代码。如何在不大量改动源代码的基础上,插上这个功能呢。在尝试各种办法无果后,我瞄准了一个方向,到Activity的管理层中找——Appliction。很快我就留意到其中的一个方法——registerActivityLifecycleCallbacks(Callbacks);我英文水品不太好,直译——注册活动生命周期回调。你可能会想,这没什么,不就是一个活动会调吗?其实重点在他的参数——ActivityLifecycleCallbacks

ActivityLifecycleCallbacks是一个接口,有以下方法

                        @Override
			public void onActivityCreated(Activity arg0, Bundle arg1) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onActivityDestroyed(Activity arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onActivityPaused(Activity arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onActivityResumed(Activity arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onActivitySaveInstanceState(Activity arg0, Bundle arg1) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onActivityStarted(Activity arg0) {
				// TODO Auto-generated method stub
				
			}

			@Override
			public void onActivityStopped(Activity arg0) {
				// TODO Auto-generated method stub
				
			}

到这里,一切都很明白了。每当Activity经过生命周期的每个阶段,都会在这里执行相应的回调。说到这里,一切都很明朗了

public class Config {

	public static Activity a;
}

然后实现ActivityLifecycleCallbacks回调中的onActivityResumed

                        @Override
			public void onActivityResumed(Activity arg0) {
				// TODO Auto-generated method stub
				Config.a = arg0;
			}

当前活动的Activity实例就到手了。与之有类似监控组件功能的回调还有registerComponentCallbacks(callback);这些回调关键时刻时候真的蛮有用的。但要注意一点,这些回调只有在4.0以上的版本才能使用,4.0以下的就不能用了。在这里也说一下当时的一段小插曲。我欣喜若狂地完成代码时,运行结果却报空指针。我一下子就傻眼了,怎么回事呢?难道回调要手动执行,若是这样,前功尽弃了。为此我查看了源码,最后得出结论,方法是系统调用的,不需要手动调用。悬起来的心一下子稳了下来。但问题还没解决,一直报空指针。打Log是最常规的方法,再给每一个方法打Log后,居然全都没有响应。后来旁边的同事问我,你的Appliction配置了没?一下子焕然大悟,在得意忘形后居然忘记在manifest中配置Appliction。低级错误,这就是被喜悦冲昏头脑的悲剧。

<application
        android:name="com.example.test.MyAppliction"
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

 

 

 

其实我是个渣渣,刚接触android,觉得好记性不如烂笔头,于是就学着写博客,第一次写,写的不好请见谅。如果有什么说得不对的,希望慷慨献言。这是本人第一次写博客,如有类同纯属巧合。希望大家支持原创得意

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值