こんにちは、助けてくれてありがとう:
Java システムを Android に移植したいのですが、透過的なスタンドアロン サービスを介してサード パーティのアプリで利用できるようにしたいので、システム ライブラリのようになります。このシステムは、サード パーティ アプリによって処理されたドキュメントを解釈し、結果をサード パーティ アプリに返す VoiceXML インタープリターです。これらのドキュメントの解釈には、任意の時間、場合によっては非常に長い時間がかかる場合があります。
現在、すべての作業を行うインタープリターを作成するサービスがあります。これは、startJVoiceXML() というメソッドで行います。
問題は、サービスが作成されてから約 20 ~ 30 秒後に ANR で Android によってサービスが強制終了されることです。しかし、そのメソッドで重い作業 (しばらく前のコードのみ) を行わなければ、サービスは実行されたままになり、それよりも長い時間で強制終了されることはありません。
必要なことを行うためにスレッドを作成する必要がありますか? 詳細な説明のために、コードにいくつかのコメントを入れます。
ありがとう!
public synchronized void startJVoiceXML(final URI uri) throws JVoiceXMLEvent, InterruptedException
{
AndroidConfiguration config = new AndroidConfiguration();
jvxml = new JVoiceXmlMain(config);
jvxml.addListener(this);
jvxml.start();
int a=0;
//the wait is not the problem, the jvxml object run method calls jvxmlStarted in the service that does a .notifyAll() on this thread
this.wait();
//this while is just to "do" some long running operation in order to emulate the Interpreter behaviour
while(a<1000)
{
Thread.sleep(500);
Log.e("JVoiceXML","esto en el while");
a=a+1;
}
}
public synchronized void jvxmlStarted() {
this.notifyAll();
}