onReceive(...)是BroadcastReceiver的方法,当系统接收到intentbroadcast时,就会被调用到。intent可以来自于sendBroadcast(Intentintent,。
onreceive方法的铺垫
1).非Activity类型的context并没有所谓的任务栈;
2).出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是SystemAlert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的context,否则将会出错。
动态、静态注册的广播其onReceive()方法里的context类型
静态注册广播,如果没声明android:process,那么BroadcastReceiver和Activity是在同一个进程的;onReceive()里传进来的context的类型最初以为是Application,但打印发现是android.app.ReceiverRestrictedContext,。此context非Activity类型,不可直接用来构造AlertDialog。
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.e("main","pid="+Process.myPid()+",tid="+Process.myTid());
Threadthread=Thread.currentThread();
Log.e("main","tid="+thread.getId()+",name="+thread.getName());
}
总之,onreceive给大家简单的介绍了一些,希望大家多看看。