2017-03-28 11 views
0

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は、ワーカースレッドを作成し、サービスを実行するために、そのスレッドを使用して知っているよう

+0

これはIntentServiceではありません。 IntentServiceはIntentServiceから拡張されています。これは通常のサービスであり、UIスレッド上で動作します。 –

+0

これは 'IntentService'に変わった' Service'です。相違点はコードスニペットで説明されています。それは文字通りそれだけです。 –

答えて

0

私はこの問題を発見しました。私は非同期呼び出しを行っていたので、呼び出しが終了する前にonHandleIntentメソッドから戻りました。問題は、それが返されたら、それはServiceHandlerによって実装されますようstopSelf(int)が、呼び出されたということです。私は意図されたタスクを実行するために設計されていなかった

@Override 
public void handleMessage(Message msg) { 
    onHandleIntent((Intent)msg.obj); 
    stopSelf(msg.arg1); 
} 

IntentService。私のシナリオでは、BackgroundServiceとして再実装し、BackgroundServiceスレッドを可能な限り長くアクティブに保つ(see this gist)ために、他の修正と一緒にstopSelf()を消去しました。

+0

あなたはインテントサービスを持っていません。あなたが投稿したコードは 'Service'を拡張しています – Voski

+0

@Voski質問のスニペットの後の2番目の段落は、私がしたことを説明しています –

1

アンドロイドIntentServiceは、UIスレッド

まさかを減速します。だから問題は別の場所にあるはずです。

+0

確かに、私には分かりませんが、説明されている変更は問題を引き起こすものです。私は 'IntentService'を' Service'に書き直してしまいました。メッセージは消えてしまいました(そして、行動の権利) –

関連する問題