在一个普通类中,想通过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()中将对象赋值给一个变量。后面普通类中使用这个变量即可。千万别自己创建,因为自己创建的只是一个普通的类而已。