5

我正在 Android 中开发一个简单的任务应用程序,我需要通过 AlarmManager 创建通知。我的问题是我有一些应该删除的警报 - 因此它们的通知 - 但它们不是,所以我决定- 使用 cancel() 从 AlarmManager 删除警报等帖子 - Android使 AlarmManager 成为静态变量所以可以从整个应用程序访问相同的实例。我这样做的方式是在我的主类中使用以下方法:

public static AlarmManager getAlarmManagerInstance() {
        if (sAlarmManager == null && sContext != null)
            sAlarmManager = (AlarmManager) sContext
                    .getSystemService(Context.ALARM_SERVICE);
        return sAlarmManager;
    }

并且在sContext变量中将以这种方式实例化:

@Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main);
        sContext = this;
        initActionBar();
    }

从这个变量创建一个单例模式是个好主意吗?有没有更好的方法?

提前非常感谢。

4

2 回答 2

1

我建议不要创建静态警报。

您应该遵循评论中给出的建议,使用为您的 PendingIntents 提供的 ID,这样您就可以肯定地从应用程序中的任何位置取消/更新警报。

我建议不要使用静态警报的原因:

可能会发生以下情况,您安排警报并对其进行静态引用,然后用户重新启动电话。您的警报消失了,对它的静态引用也消失了。

如果您需要警报在这种情况下工作,您应该在共享首选项/数据库/文件中写入它们的 ID 和所需信息,并在 onBoot 或其他适合您的应用程序的事件上重新安排它们。

于 2013-08-13T10:53:04.317 回答
1

安卓文档说:

您不直接实例化此类;相反,通过 Context.getSystemService(Context.ALARM_SERVICE) 检索它。

AlarmManager 只是一个提供对系统警报服务的访问的类。

该服务在系统中运行,因此不必关心它们,只需使用 AlarmManager 作为与它们交互的接口即可。

因此,每次您需要访问此服务时,只需按照文档所述检索它:

Context.getSystemService(Context.ALARM_SERVICE)

于 2013-08-13T13:49:08.397 回答