私が書いているアプリケーションでは非常に奇妙な問題があります。サービス、AsyncTasks、UIスレッドへのアクセス権について再度誤解していることもあります。サービス、AsyncTasks、CalledFromWrongThreadException
このアプリケーションは、複数の他のアクティビティにナビゲートする主なアクティビティで構成されています。このアプリケーションには、アプリケーションがフォアグラウンドにある間にバックグラウンドで定期的にポーリングするサービスと、ライブラジオストリームをストリーミングするために「AACPlayer」を実行するサービスの2つがあります。
ラジオのUIコントロールを持つアクティビティの1つが、ラジオのサービスを開始します。これを行うには、AsyncTaskを起動してPLSファイルを取得し、最後にストリームの適切なURLでサービスを開始します。 AACPlayerも起動するサービスが開始されます。ストリームの再生が開始されると、ストリームの再生が開始されたというブロードキャストが発行されます。ラジオコントロールを保持するアクティビティのブロードキャスト受信者は、インテントを処理し、UIを更新します。
これは、サービスがUIを更新する意思をブロードキャストする前に、アプリを離れるか、ラジオ画面からバックアウトするという一見ランダムな組み合わせによって、他のすべてのアクティビティが現在外部で実行されているように見えるUIスレッドのこの状態で発生した他のすべてのアクティビティは、それが違法な状態であるという例外を受け取り、UIスレッドで実行されていないので、UIに関連する何かを変更することはできません。通常の犯人例外メッセージは次のとおりです:W/System.err(3818): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
突然、アプリケーション全体が通常のUIスレッドで実行されなくなり、他のすべてのアクティビティでこの例外が報告されていますか?このエラーを引き起こすような違法行為を行っているコードはありません。 AsyncTasks内にUI関連のものはありません。ブロードキャストレシーバー(無線サービスから受信)によってトリガーされるコールバックはUIをタッチしますが、私はこれを行うための別の方法は考えられません。
アプリケーションの強制終了時にも問題は解決されませんが、アプリケーションが強制終了するか、またはAndroidの設定からデータが消去されると、問題は解決されます。
EDIT - ここでは、要求として開始されたサービスおよびサービスを開始活動の概要を説明し、いくつかのコードは、/ UIを制御しています:https://gist.github.com/1080797
任意の考えをいただければ幸いです。ありがとう。
いくつかのコードを追加してください。 – Marmoy
サービスファイルとそのサービスの「責任者」である要点を作成しました。 https://gist.github.com/1080797 – jlindenbaum