5

エラーサービス

host.activityは私のパッケージであり、host.framework.ServicePromemoriaはAndroidサービスです。

このエラーはどういう意味ですか?

4

2 に答える 2

9

これは、サービスがかなり長い操作を実行しており(ほとんどのANRは5秒を超える操作からのものです)、UIスレッドで実行していることを意味します。これは、ネットワークタスク、データベースタスク、またはその他の長い操作である可能性があります。

これを修正するには、スレッドまたはAsyncTaskを使用して、メインUIスレッドから離れたサービスでタスクを実行します。

実際、次のように、新しいスレッドでサービスを直接開始できます。

Thread t = new Thread(){
public void run(){
getApplicationContext().bindService(
        new Intent(getApplicationContext(), YourService.class),
        serviceConnection,
        Context.BIND_AUTO_CREATE
    );
}
};
t.start();

また、後で使用する必要がある場合は、bindserviceによって返された値をキャッシュします(存在する場合)。

于 2012-10-24T16:46:15.380 に答える
3

受け入れられた答えがありますが、ここに何かを追加したいと思います。「アプリケーションが応答しない(ANR)サービスandroidを実行する」理由は、タイムアウト中にサービスがライフサイクル呼び出し(onCreateなど)を終了しないためです。通常のサービスのデフォルトのタイムアウトは20秒です。Servcie onCreateでブロックを操作する必要がある場合は、新しいスレッドを開始する必要があります。または、IntentServiceを使用することもできます。

于 2019-03-07T10:15:18.507 に答える