Application 不可自己创建Application对象

    在一个普通类中,想通过Application发送广播时(比如,在TCP,UDP协议中的工作线程接收方法中想向一个Activity发送广播),可通过Application来发送。


Application代码可以像下面这样写

public class MyApplication extends Application{

private static MyApplication instance;

public  static MyApplication getInstance(){

return instance;
}

public void onCreate() {
instance=this;
}


}


发送广播代码:MyApplication.getInstance().sendBroadcast(new Intent("LOGIN_RESULT_SUCCESS"));

过程如下:程序启动时,首先系统自动创建Application对象,然后运行onCreate()方法,将instance赋值为Application对象本身。所以后面在普通类发广播时,就能通过MyApplication.getInstance().sendBroadcast(new Intent("LOGIN_RESULT_SUCCESS"));来发广播了。


切记,千万不能这样写,如下

public class MyApplication extends Application{

private static MyApplication instance;

public  static MyApplication getInstance(){
if(instance==null){
instance=new MyApplication();
}
return instance;
}

}


发送广播代码:MyApplication.getInstance().sendBroadcast(new Intent("LOGIN_RESULT_SUCCESS"));

过程如下:程序启动时,首先系统自动创建Application对象,然后运行onCreate()方法,但onCreate()中无任何代码。在程序运行过程中,发送广播时,MyApplication.getInstance(),首先调用getInstance()方法,因instance==null,所有创建Application对象,instance=new MyApplication(); 然后返回instance,return instance;接下来调用MyApplication.getInstance().sendBroadcast(new Intent("LOGIN_RESULT_SUCCESS"));会出现空指针异常,因为此时的Application对象是你自己创建的,他就是一个普通的类而已。不可能有sendBroadcast()等之类的方法的。所以切记,Application不能自己创建,就如同不能自己创建Activity一样。要使用程序自动创建得Application.因为程序自动创建的Applicaton.不仅创建了对象,调用了onCreate(),肯定还做了其他初始化的工作。

综上所述,使用Application一定要使用程序自己创建的Application,在onCreate()中将对象赋值给一个变量。后面普通类中使用这个变量即可。千万别自己创建,因为自己创建的只是一个普通的类而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值