Android:在BroadcastReceiver.onReceive()调用之间保持对象

时间:2012-06-12 10:16:03

标签: android broadcastreceiver

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

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

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

任何帮助/指示都将受到高度赞赏!

TIA, - Manish

2 个答案:

答案 0 :(得分:1)

你不能使用单例类,但你可以创建一个普通的类并让它单独使用。该类有一个HashMap,并用密钥存储你的api和camera对象。当您需要停止特定任务时,您可以通过某个键找到它并通过该对象阻止它们。

当你在该单例中启动该对象的任务存储时以及当你想停止从该hashmap中找到该对象并停止/处置该任务时。

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

private static volatile Utils _instance = null;


public static Utils Instance() {
    if (_instance == null) {
        synchronized (Utils.class) {
            _instance = new Utils();
        }
    }
    return _instance;
}

答案 1 :(得分:0)

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

我认为这是静态领域的一种更好的方法。 但这也不是全面证明。我也在寻找这个问题。