2

サービスを備えたアプリケーションを構築しています。すべてのアプリケーションコンポーネントが同じUIプロセスで実行されることは知っていますが、少なくともマニフェストで指定します。したがって、ANRのメッセージを回避するには、3つの方法があります。


  1. android:process = ":remote"のような別のプロセスで実行するようにマニフェストでサービスを指定しますが、バッテリーとCPU処理を大量に消費するため、これはお勧めできませんというStackOverflowの投稿を読みました。それらの投稿は信頼できる人々からのものなので、私は本当に尊敬しています。

  2. IntentServiceを使用します。それはおそらく良い方法です。ただし、アクティビティが表示されていなくても、サービスを実行する必要があります。サービスが必要なため、他のユーザーからの新しいメッセージがないかWebサービスをチェックし続け、通知を通じて通知します。IntentServiceを使用して可能でしょうか?それはエレガントな解決策です。

  3. ローカルサービスを使用します。マニフェストファイルからandroid:process = ":remote"属性を削除するだけです。しかし、いくつかの...OnMainThreadExceptionエラーが発生します。つまり、これらの長時間実行される操作を実行したり、AsyncTaskを使用したりするには、特別なスレッドを作成する必要があります。

多分それをする別の方法があります。サービスで長時間実行操作を実行する方法を教えてください。本当に不可欠です。

ありがとう。

4

2 に答える 2

3

UI スレッドで実行されている Android サービス。そのため、AsyncTask または別の方法を使用して、ネットワーク リクエストのスレッドを処理する必要があります。

于 2013-02-07T21:13:56.137 に答える
1

まず、アクティブな部分 (ネットワーキング) と、次のアクティブな部分の前のスリープ部分の 2 つの部分があることを受け入れましょう。IntentService活躍する部分は地味なローカルが使えると思います。完了時に各アクティブ パーツは、 を使用して次のアクティブ パーツを再スケジュールする必要がありAlarmManagerます。このアプローチにより、スリープ状態のときにアプリがリソースを消費しないようになります。その通りです。ユーザーに提示する結果を取得したら、IntentService通知を使用できます。

于 2013-03-21T22:13:30.243 に答える