带有BroadcastReceiver的警报管理器在应用程序被杀死后[关闭]不起作用

问题描述 投票:0回答:1

我目前正在使用Android Studio开发一个Android应用。我的要求之一是在准确的时间触发BroadcastReceiver。直到应用程序在后台运行之前,它都可以正常工作。一旦该应用程序从最近的应用程序列表中被杀死,它将无法正常工作。我不知道问题出在警报管理器中还是在BroadcastReceiver中。

        <receiver android:name=".BackgroundServer"
            android:permission="TODO"
            tools:ignore="ExportedReceiver">
            <intent-filter>
                <action android:name="birthday.wallpaper.WALLPAPER_CHANGE"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </receiver>

并且在MainActivity中...

Intent intent = new Intent(this,BackgroundServer.class);

            PendingIntent pendingIntent = PendingIntent
                   .getBroadcast(getApplicationContext(), 0,intent,0);

            AlarmManager manager = (AlarmManager) getSystemService(ALARM_SERVICE);
            assert manager != null;
            manager.setInexactRepeating(AlarmManager.RTC_WAKEUP,
                    calendar.getTimeInMillis(),
                    AlarmManager.INTERVAL_DAY,
                    pendingIntent
            );

注意:警报管理器是在主要活动的onStart方法中设置的。

android broadcastreceiver alarmmanager
1个回答
0
投票

您使用了动态声明的接收器。这意味着它是在您的活动中创建并注册的。声明这种类型的接收器并在onResume()中注册。当您终止活动时,必须在onStop()中注销它。如果不注销,将会收到一个称为LeakIntentMemory的错误,但是活动通过以下方式注销它:本身和应用不会崩溃。但是当您查看logcat时,您会看到LeakIntentMemory错误。正如您所告诉的,这种类型的接收器可以正常工作。当您关闭应用程序时,您什么也收不到。如果您想在应用关闭时收到任何消息,则必须在android清单中声明接收者。有关更多示例,请检查我的GitHub https://github.com/okanSerdaroglu/BroadcastReceivers

© www.soinside.com 2019 - 2024. All rights reserved.