IntentServiceがをスキップしています。「XXフレームをスキップしました!アプリケーションがメインスレッドで作業している可能性があります。 LogCatにというメッセージが表示されますが、理由はわかりません。Android IntentServiceがUIの速度を遅くする
私はP2Pブローカーと通信するアプリケーションに取り組んでいます。私はすべての通信ロジックをサービスに移行することに決めました。当初、私はその方法で何かをやっていた:それは私がすべてそのロジックを処理するためのワーカースレッドを作成していないにもかかわらず、OK走っ
class MyService extends Service {
@Override
onCreate() {
// This info need to stay up as long as the context is
stablishEndpointAndTransport();
}
@Override
onStartCommand(Intent intent, int startId) {
registerAccountId(intent.getIntExtra(EXTRA_ACCOUNT_ID));
}
@Override
IBinder onBind(Intent intent) {
super.onBind(intent);
}
@Override
onDestroy() {
if (registeredAccount) deleteAccount();
deleteTransportAndEndpoint();
}
}
。しかし、より多くの接続ロジックを実装する必要があるので、バックグラウンドワーカースレッドのすべてを処理するため、ロジックをIntentServiceに移行することに決めました。
は私がしたすべては、IntentService
に基底クラスの名前を変更onHandleIntent()
にonStartCommand()
方法でコンテンツを移動し、その特定の場合に一定のアクションを指定し、onStartCommand()
とonBind()
オーバーライドを消去しました。
メインスレッドのパフォーマンスにどのような影響がありますか?
EDIT
は関連するかもしれないが、stablishEndpointAndTransport()
とregisterAccountId()
両方が非同期ているフレームワークのいくつかの方法を実行します。具体的には、ブローカと通信する方法は次のとおりです。つまり、ハードワークはすでに別のスレッドで実行されているため(IntentService
をあきらめるかもしれません(実際にはService
として正常に動作している理由を説明してください)。それでも、なぜIntentService
がUIスレッドスキップフレームを作っているのか分からない。あなたはIntentServiceは、ワーカースレッドを作成し、サービスを実行するために、そのスレッドを使用して知っているよう
これはIntentServiceではありません。 IntentServiceはIntentServiceから拡張されています。これは通常のサービスであり、UIスレッド上で動作します。 –
これは 'IntentService'に変わった' Service'です。相違点はコードスニペットで説明されています。それは文字通りそれだけです。 –