6

flite という名前のサードパーティの tts を使用するアプリケーションを開発しています。ttsが文を話すように、私は何かをしています。話されている各単語を強調したいと思います。このために、tts から単語レベルのコールバックを取得することができました。ワークフローはこのようなものです--「テキストを話す」ボタンが押されました.tt s サービスを開始し、テキストを C 言語でアプリと結合された flite tts に送信します。ここで、C コードから、すべての単語の後に、2 つの異なる Java アクティビティへの 2 つのコールバックを作成します。テスト アクティビティで単語レベルのコールバックを正常に取得していますが、その後は UI 作業を行うことができません。

以下は、コールバックを取得したときに実行するコードです。これは、C コードから呼び出される関数です。

private void WordCallback(int isword) {// from
    // callback
    if (isword == -1) {
        Log.d(LOG_TAG, "its not a word");
    } else if (isword == -2) {
        Log.d(LOG_TAG, "yeah..its the end");
    } else {
        Log.d(LOG_TAG, "its word no " + isword);

        int word = isword;
        Log.d(LOG_TAG, "highlightwords");
        highlightwords(isword);

        if (isword == 4) {
            Log.d(LOG_TAG, "in if");

            new Thread(new Runnable() {
                @Override
                public void run() {
                    Log.d(LOG_TAG, "thread started");
                    try {
                        Flitetest.this.runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Log.d(LOG_TAG, "run on ui");
                                textview.setText("#" + isword);
                            }
                        });
                        Thread.sleep(300);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }).start();
        }
    }    
}

FliteTest はアクティビティの名前です。ログは「スレッドが開始されました」まで出力されますが、runonuithread() 内のコードは実行されず、エラーもありません。

また、textview.settext("something")スレッドと runonuithread() なしで書き込むと、エラーが発生します。

fatal signal 11(sigsegv) at 0x6fc64e87(code=1), thread 20292(SynthThread).

その行動の理由は何ですか?

4

1 に答える 1

0

AndroidICS (4.0+)で があり、 android:anyDensity=falseかつICS電話で強制的に GPU レンダリングを有効にしている場合。これは、ネイティブ Android アプリの問題でもあります。あなたのオプションは、オプションを使用しないか、電話での強制 GPU レンダリングを無効にすることです。他の人の電話では後者を実際に制御することはできないため、前者が最善の解決策のようです. すべての then に ' ' サフィックスを使用することを忘れないでください。AndroidManifest.xmlandroid:anyDensity=falsedpdimensions

于 2013-07-08T11:19:43.653 に答える