在BroadcastReceiver.onReceive(..)之前是否会调用Application.onCreate(Bundle)?

时间:2015-10-12 10:04:02

标签: android

只是想验证Application.onCreate()之前是否保证会调用BroadcastReceiver.onReceive()?假设您正在等待 BOOT 广播或短信广播,您是否可以确定在Application.onCreate()之前已经呼叫了BroadcastReceiver.onReceive()一次?感谢

3 个答案:

答案 0 :(得分:18)

文档告诉我们以下内容:

  

public void onCreate()

     

在应用程序启动时调用,在任何活动,服务之前,   或接收器对象(不包括内容提供商)已创建。

在这里找到: http://developer.android.com/reference/android/app/Application.html

答案 1 :(得分:5)

public void onReceive(Context context, Intent intent) 如果您注册静态接收器,则上下文是应用程序 否则,您可以使用

调用registerReceiver

答案 2 :(得分:-1)

旧问题,但是我可以提供更新的答案和实际测试结果。

最初我假设是这样,然后将应用程序设置为onCreate(),以首先保存应用程序上下文,就像这样:

@Override
public void onCreate()
{
    myapp.app_context = this;

    super.onCreate();

现在我声明了一个接收器,

    <receiver android:name=".myreceiver"
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
        </intent-filter>
    </receiver>

并在收到时:

@Override
public void onReceive(Context context, Intent intent)
{
    ctx = myapp.app_context;

得到一个显示ctx(myapp.app_context)的堆栈跟踪为NULL!在Android 6 Galaxy J7设备上为1,在Android 9 Xperia XZ1设备上为1。