如果应用程序完全关闭,BroadcastReceivers会触发吗?

时间:2016-07-24 15:44:44

标签: android broadcastreceiver android-service

我的应用使用AlarmManager和BroadcastReceiver类安排警报。

如果应用程序正在运行或后台运行,它会起作用,但如果它被完全杀死,则似乎事件未被触发。

接收器调用一个IntentService,它使用一些参数调用Maps REST API,然后在通知中显示格式化的输出。该服务在不使用AsyncTask的情况下执行此操作,因为它已经是后台线程。

此外,如果应用程序不在Debug中,是否有一种检查Receiver或Service是否被调用的好方法?

1 个答案:

答案 0 :(得分:2)

如果您的BroadcastReceiver必须收到意图,即使应用被杀,您也应该通过AndroidManifest.xml注册到所需的意图。

这样,BroadcastReceiver将独立于您的应用生活周期。

这样,只要某个应用广播了所需的意图,Android就会自动通知您BroadcastReceiver

<强>的AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    ...

    <application>
        ....
        <receiver android:name=".MyCustomBroadcastReceiver">
            <intent-filter>
                <action android:name="com.example.mytestapp.MY_CUSTOM_INTENT" />
            </intent-filter>
        </receiver>
    </application>
</manifest>

<强> MyCustomBroadcastReceiver.java

public class MyCustomBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent != null) {
            String action = intent.getAction();
            if(action != null) {
                if(action.equals("com.example.mytestapp.MY_CUSTOM_INTENT")) {
                    // DO YOUR STUFF
                } 
            }
        }
    }
}

创建警报意图

然后,在创建闹钟管理器时,请使用以下代码:

Intent intentForAlarmManager = new Intent("com.example.mytestapp.MY_CUSTOM_INTENT");

PendingIntent.getBroadcast(/* CONTEXT */, /* ID */ , intentForAlarmManager, /* FLAGS */));