在Blackberry中异常终止后不听PhoneListener

时间:2013-09-20 06:26:25

标签: blackberry blackberry-jde

我正致力于跟踪InComing / Outgoing calls& amp;将记录保存到数据库中。 昨天我看到了一个场景,其中应用程序被OS&弹出警告消息(错误:应用程序没有响应)。应用程序被OS终止后。应用程序无法再次收听来电/去电。 我认为,应用程序电话侦听器未被异常应用程序终止注册。 Os调用System.Exit(0)来终止应用程序

如果我遵循这种方法: -

public static void main(String[] args) 
{
    /** 
     * Registering the phone Listener. 
     * */
    Phone.addPhoneListener( new ConcretePhoneListener() );

   new SampleUIApp().enterEventDispatcher();
   }

在这种情况下,每次启动应用程序时,都会注册电话听众。 和应用程序(电话监听器)多次注册。单次进/出呼叫的方法我正在进行多次计算

void callConnected( int aCallId ) 
callDisconnected( int aCallId ) 

为了解决这个问题,我正在使用RunTime商店管理系统。  为此,我使用以下方法: -

private static void registeringPhoneListener() 
{
    RuntimeStore mRuntimeStore = RuntimeStore.getRuntimeStore();
    final long GUID = 0xba9e3b33ac5fe37eL;

    String msPhoneListenerString = null;

    if(mRuntimeStore.get(GUID) != null)
    {
        Log.debug(  "PhoneListener is Already Implemented ## ");
    }
    else
    {
        Phone.addPhoneListener( new ConcretePhoneListener() );
        mRuntimeStore.put(GUID, "PhoneListener");   

          Log.debug("PhoneListener Implemented First Time ## " );           
    }
}

这种方法工作正常,直到我被操作系统异常终止, 因为RuntimeStoreManagemnet不为null,但Application Phone-listener是Derigester。

请帮帮我。

1 个答案:

答案 0 :(得分:1)

这里发生的事情比你向我们展示的要多,所以我不相信这是正确答案。我有信心的是,您需要更改代码才能使其正常工作。

我怀疑你是在滥用监听器处理。

通常,侦听器在他们正在侦听的应用程序的上下文中运行。所以实际上你的监听器是在Phone应用程序的控制下运行的。你不想在你的监听器代码中打破这个(看起来你正在做)。因此,您应该尽可能地使您的侦听器代码紧密(高效且不易破碎)。在这种情况下,从内存中,侦听器使用事件线程运行,因此除了确保代码紧张之外,您不应该执行任何阻塞操作 - 并且记住读取数据库可能算作阻塞操作。

一般建议是确保听众尽可能少地做 - 最好的建议是他们启动全局活动,并在您的应用程序中处理繁重的处理。

这是一篇关于全球活动的文章:

http://supportforums.blackberry.com/t5/Java-Development/Global-Events-and-Global-Event-Listeners/ta-p/444814

讨论了这个理论后,这里发生了什么?

在这种情况下,我怀疑你的监听器是阻塞的,你正在取消Phone应用程序。我很确定电话应用程序会被系统重新启动(没有电话应用程序的手机有什么用途!)所以你可能不会注意到这一点。但是当重新启动Phone应用程序时,它没有您的监听器 - 因此您停止收到通知。

所以我认为您需要修复您的Listener代码以确保它停止取消Phone应用程序。

我怀疑你有两个选择:

  1. 使用全局事件将处理移动到您自己的应用程序(我的 建议)
  2. 将阻止操作从事件线程移开。
  3. 实施任何一项都应该停止您的应用程序破坏电话应用程序,问题将得到解决。