2011-03-02 95 views
1

我创建了一个小TTS的应用中实施OnUtteranceCompleteListener和,而事情似乎确切地按预期工作,我注意到的logcat以下(每个完成的话语):TTS回调:调度完成1

03-01 20:47:06.436: VERBOSE/TtsService(381):TTS回调: 调度完成1

同样,这似乎是良性的,但我不明白 ''手段。对于所有话语的所有这样的线路都说“完成到”,即使对于大于1的话语ID也是如此。

'1'在此日志中的含义是什么?

顺便说一句,这个消息不是由我的代码生成的,而是由TTS引擎(Pico)本身生成的。

回答

1

综观提供http://eyes-free.googlecode.comTTSService.java源代码可以找到函数dispatchUtteranceCompletedCallback()

private void dispatchUtteranceCompletedCallback(String utteranceId, String packageName) { 
    /* Legacy support for TTS */ 
    final int oldN = mCallbacksOld.beginBroadcast(); 
    for (int i = 0; i < oldN; i++) { 
     try { 
      mCallbacksOld.getBroadcastItem(i).markReached(""); 
     } catch (RemoteException e) { 
      // The RemoteCallbackList will take care of removing 
      // the dead object for us. 
     } 
    } 
    try { 
     mCallbacksOld.finishBroadcast(); 
    } catch (IllegalStateException e) { 
     // May get an illegal state exception here if there is only 
     // one app running and it is trying to quit on completion. 
     // This is the exact scenario triggered by MakeBagel 
     return; 
    } 
    /* End of legacy support for TTS */ 
    ITtsCallbackBeta cb = mCallbacksMap.get(packageName); 
    if (cb == null) { 
     return; 
    } 
    Log.v(SERVICE_TAG, "TTS callback: dispatch started"); 
    // Broadcast to all clients the new value. 
    final int N = mCallbacks.beginBroadcast(); 
    try { 
     cb.utteranceCompleted(utteranceId); 
    } catch (RemoteException e) { 
     // The RemoteCallbackList will take care of removing 
     // the dead object for us. 
    } 
    mCallbacks.finishBroadcast(); 
    Log.v(SERVICE_TAG, "TTS callback: dispatch completed to " + N); 
} 

1是N,其由返回值从mCallbacks初始化的当前值。 beginBroadcast()

beginBroadcast()是类RemoteCallbackList的方法和其文档指出它:

返回在 广播回调的数量,与 getBroadcastItem(INT)被用来确定该 范围的您可以提供的指数

这对您有帮助吗?

+0

你打赌这个帮助。谢谢! – an00b 2011-03-02 23:58:42