14

私のアプリでは、サービスを使用してサーバーと通信します。Service は、複数のメッセージ キュー スレッドを生成して、優先度の異なるタスクを処理します。

このモデルは、大きな問題なく約 1 年間使用されています。onCreateしかし、最近、サービス クラスの が複数回呼び出されていることがわかりました。onDestroy2 つの呼び出しの間に呼び出されることはありませんonCreate。したがって、既存のスレッドを強制終了する機会がありませんでした。この動作が発生すると、サービス内でスレッドが重複します。

私が変更した唯一のことは、ユーザーがアプリにサインインするフォアグラウンド サービスとしてサービスを実行することです。フォアグラウンド サービスが問題を引き起こしているかどうか疑問に思っています。

何か案は?

4

3 に答える 3

12

私のサービスがアクティビティで同じプロセスを使用したときに同じ問題が発生しました(デフォルト)。しかし、サービスに別のプロセスを使用させても問題はありません。以下のように AndroidManifest.xml を編集しました... ( android:process属性を追加)

<service android:name="kr.co.pkbio.binoo.CacheFileManagerService" android:process=":kr.co.pkbio.binoo.service"/>
<service android:name="kr.co.pkbio.binoo.ActivityStackManagerService" android:process=":kr.co.pkbio.binoo.service"/>

詳細については、 http://developer.android.com/guide/topics/manifest/service-element.htmlを参照してください。

于 2011-10-16T19:37:46.513 に答える
0

Bluetoothサービスを扱っていたときもまったく同じ問題が発生しました(問題は開発中に発生しました)。デバイスを切断してADBを強制終了したとき、それは二度と起こらず、onCreateは一度だけ呼び出されました。それは時々起こるので、私はそれがいくつかのバグであると思います。しかし、おそらくあなたは少し異なる問題を抱えています...

于 2011-09-28T15:46:13.000 に答える
0

これは誰かの役に立つかもしれません。アクティビティの 1 つで onSaveInstanceState メソッドのバンドルを介してマップを保存するときに、同じ問題が発生しました。マップには、アプリの他の部分で使用されていたオブジェクト (そのうちの 1 つは私のサービスでした) への参照が含まれていたため、アクティビティを終了するたびに、私のサービスが最初からやり直されると思います。

これはAndroid OSの悪ふざけだと思います。

于 2017-11-27T12:05:45.400 に答える