0

少し複雑な状況 -

  • Service は個別の APK としてパッケージ化され、マニフェストにはそれ以外のものはありません。
  • Service は着信要求を受け入れ、MessageHandler で処理します。
  • あるケースでは、ハンドラーは次のように AsyncTask を生成します。

    private class XHandler implements MessageHandler {
    
        @Override
        public void handleMessage(Message incoming) {
    
            Bundle b = incoming.getData();
    
            ...            
            new XAsyncTask(...).execute();
        }
    }
    
  • 教科書の単純な非同期タスクが進行状況を報告します

  • ... ICS では、ジンジャーブレッドではありません。

それは何ですか - バグですか?

AsyncTask のドキュメントには、"onProgressUpdate(Progress...)、publishProgress(Progress...) の呼び出し後に UI スレッドで呼び出される" と記載されています。しかし、スタンドアロン サービスの UI スレッドのようなものはありませんね。

サービスに関するドキュメントには、「サービスは、それをホストするアプリケーションのメイン スレッドで実行されます。デフォルトでは」と記載されていますが、これは UI スレッドを構成しますか?

UPDATE 2012/07/10: android:targetSdkVersion="10" を android:targetSdkVersion="15" に変更すると、アプリが ICS で実行されているときに同じ効果が発生します。これまでのところ唯一の有効な組み合わせは、API 15 で実行されている targetSdkVersion="10" です。

4

1 に答える 1

0

メイン/UI スレッドに関するあなたの質問は、このページでかなりよく説明されていると思います:スレッド

アプリケーションが起動されると、システムは「メイン」と呼ばれるアプリケーションの実行スレッドを作成します。このスレッドは、描画イベントなどの適切なユーザー インターフェイス ウィジェットにイベントをディスパッチする役割を担っているため、非常に重要です。これは、アプリケーションが Android UI ツールキットのコンポーネント (android.widget および android.view パッケージのコンポーネント) と対話するスレッドでもあります。そのため、メイン スレッドは UI スレッドと呼ばれることもあります。

あなたの AsyncTask であなたを助ける方法がわかりません。あなたは何をしようとしているのですか?あなたのサービスはどのように実装されていますか? AsyncTask が完了したら、何をしたいですか?

IntentServiceを使用していないのはなぜですか?

于 2012-06-13T09:49:07.483 に答える