0

外部イベントがGPIOの1つをトリガーしたときにユーザーにダイアログを表示することになっているAndroid 2.1アプリを書いています。Linux デバイス ドライバーを作成し、JNI ユーザー空間インターフェイスを作成しました。アプリが起動すると、デバイス ドライバーをポーリングするリモート サービスが起動します。aidl を使用して、アクティビティとサービスの間で通信を行うことができましたが、アクティビティを閉じるときに、サービスにアクティビティを再起動してもらいたいと考えています。次のコードを使用してそれを達成しました:(サービス内)

Intent dialogIntent = new Intent(getBaseContext(),WiegandDemoActivity.class);
dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplication().startActivity(dialogIntent);

その直後に、aidl を使用して通信したいので、以下を使用しました。

synchronized (listeners) {
for (WiegandListener listener : listeners) {
    try {
         listener.handleWiegandUpdated();
...

アクティビティは前面に出されますが、援助メッセージは届きません。なぜそれが起こっているのですか?(アクティビティが前面にある場合、すべて正常に動作します)

コードが大きいため、ここにすべてのコードを掲載したくはありませんが、さらに情報が必要な場合は、お気軽にお問い合わせください。

ありがとう。

4

1 に答える 1

0

リモート アクティビティに再バインドする必要があります。開始時にアクティビティをサービスに登録することは実用的ですか?新しいアクティビティが着信メッセージを受信する準備ができていることがわかったときに更新コードがトリガーされますか?

また、アクティビティが終了したら、必ずイベント リスナーの登録を解除してください。そうしないと、ハングアップします。実際のアクティビティへの参照が含まれている場合、アクティビティ全体がメモリに残り、ガベージが収集されません (アクティビティが閉じられていて、新しいアクティビティを作成した場合でも)。

于 2011-09-02T11:18:29.613 に答える