host.activityは私のパッケージであり、host.framework.ServicePromemoriaはAndroidサービスです。
このエラーはどういう意味ですか?
host.activityは私のパッケージであり、host.framework.ServicePromemoriaはAndroidサービスです。
このエラーはどういう意味ですか?
これは、サービスがかなり長い操作を実行しており(ほとんどの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によって返された値をキャッシュします(存在する場合)。
受け入れられた答えがありますが、ここに何かを追加したいと思います。「アプリケーションが応答しない(ANR)サービスandroidを実行する」理由は、タイムアウト中にサービスがライフサイクル呼び出し(onCreateなど)を終了しないためです。通常のサービスのデフォルトのタイムアウトは20秒です。Servcie onCreateでブロックを操作する必要がある場合は、新しいスレッドを開始する必要があります。または、IntentServiceを使用することもできます。