【问题标题】:android: alarm task closed on application killedandroid:在应用程序终止时关闭警报任务
【发布时间】:2012-12-12 02:45:26
【问题描述】:

在我的应用程序上,我想每隔几分钟执行一次任务,为此我添加了一个警报管理器以在经过的时间上运行。代码很简单:

    AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent i = new Intent(this, OnAlarmReceiver.class);
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() + 1000 /* Initial run in 1 second */,
            OnBootReceiver.REPEAT_PERIOD, /* 10 minutes */
            pi);

当然我有广播接收器:

public class OnBootReceiver extends BroadcastReceiver {
     //implementation here
}

我在我的应用程序的主要活动和广播 (OnBootReceiver) 中运行此代码,以确保我的代码在应用程序启动和每次启动时运行。

我的问题是操作系统关闭 bg 应用程序时。如果我转到任务管理器并运行 Clear Memory 命令,我的应用程序将关闭并且我没有收到任何警报通知。

在这种情况下,我如何继续在我的代码上接收警报通知?

【问题讨论】:

    标签: android broadcastreceiver


    【解决方案1】:

    如果我转到任务管理器并运行清除内存命令,我的应用程序将关闭并且我没有收到任何警报通知。

    由于标准 Android 中不存在“清除内存命令”,因此只有您的设备制造商知道该功能的具体实现。

    在这种情况下,我如何继续在我的代码上接收警报通知?

    你可能不知道。最有可能的是,设备制造商正在做一些强制停止在“设置”中所做的事情,包括取消安排你的闹钟。您可以通过在“运行清除内存命令”之前和之后运行adb shell dumpsys alarm 来确认这一理论,以查看警报发生了什么变化。

    请注意,即使在缺少“清除内存命令”的设备上,用户也可以从“设置”中强制阻止您,并删除您的警报。

    【讨论】:

    • 用户有办法停止使用应用程序(关闭按钮),我需要确保只有用户可以关闭应用程序而不是操作系统。
    • @ZelterAdy:您可以构建自己的移动操作系统。或者,您可以下载 Android 源代码,从“设置”中删除“强制停止”按钮,重新构建该源代码,将其转换为 ROM 模块,然后在任何设备上安装该 ROM 模块。否则,用户对其设备拥有最终控制权,这包括强制停止和设备制造商提供的任何等效设备。
    【解决方案2】:

    试试这个:

    对于您的活动,在清单 xml 中,输入:

    android:persistent="true"
    

    编辑:

    请查看此链接:https://groups.google.com/forum/#!topic/android-platform/nU0e3aoBlSYhttp://developer.android.com/reference/android/app/Service.html#startForeground%28int,%20android.app.Notification%29

    【讨论】:

    • 谢谢 - 如果我有服务,这些链接会有所帮助,但我没有。我尽量避免使用服务,我使用警报接收器实现了我的应用程序,在将其更改为服务之前,我想尝试找到一种方法将其修复到实际表单上。
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    相关资源
    最近更新 更多