1

我有一个接收短信并开始某些“工作”的应用程序,现在这项工作是通过相机和其他一些第三方 API 完成的。因此,当我收到适用于我的应用程序的 START 消息 (SMS) 时,我开始工作并继续工作,直到应用程序收到来自远程设备的 STOP 消息。

接收器在 manifest.xml 文件中注册,否则可以正常工作。

现在的问题是,我的应用程序在收到 START 消息时开始正常工作,但是当我在一段时间后收到 STOP 消息时,我无法真正停止工作,因为我对相机和第三方 API 都有的句柄/对象引用为空。我对它们中的任何一个都没有任何控制权——也不能让它们成为单身人士。所以我需要在两次调用之间保留这些对象引用BroadcastReceiver,我无法找到正确执行此操作的方法。目前,我刚刚创建了该类的这两个静态成员,它工作正常,但这并不是一个很好的解决方案。在这种情况下处理情况的最佳方法是什么?如何在多个onReceive()调用之间使用初始化的对象BroadcastReceiver

任何帮助/指针将不胜感激!

TIA, - 马尼什

4

2 回答 2

1

您不能使用单例该类,但您可以创建一个普通类并将其设为单例。该类有一个 HashMap 并用一个键存储您的 api 和相机对象。当您需要停止特定任务时,您可以通过某个键找到它并通过该对象停止它们。

当您启动任务时,将该对象存储在该单例中,并且当您想要停止从哈希图中找到该对象并停止/处置任务时。

我建议你创建一个单例对象 volatile。

private static volatile Utils _instance = null;


public static Utils Instance() {
    if (_instance == null) {
        synchronized (Utils.class) {
            _instance = new Utils();
        }
    }
    return _instance;
}
于 2012-06-12T10:37:43.960 回答
0

您还可以在类中添加对象引用,ApplicationClass即从类扩展的Application类。您的应用程序类会一直保留在内存中,直到任何ActivityService正在运行。它只会杀死所有的ActivityService杀死的。

我认为这是静态字段的更好方法。但这也不是Full-Proof。我也在寻找这个问题。

于 2012-06-12T10:27:43.110 回答