11

アラーム マネージャーで IntentService を使用して、15 秒ごとにトリガーします。サーバーに大量のデータを継続的に送信し、バックグラウンドで大量のデータを受信する必要があります。プロセスの下に従う必要があります:

  1. クエリを使用してデータベースからデータを読み取っています。

  2. 次に、POJO アーキテクチャを介して Json に変換します。

  3. Retrofit Library を使用して、リクエストでこの JSON をサーバーに送信します。

  4. 応答でデータを受信します。

  5. データベースに更新がある場合、特定のクエリを介してこのデータをデータベースに挿入します。

代替アプローチはありますか?私はANRに直面しているので。データが少ない場合は、正常に機能しています。しかし、データのサイズが大きくなると、UI が停止し、アプリケーションが応答しなくなります。

4

2 に答える 2

4

多くの闘争の後、最終的に私は解決策を得ました:

インテント サービスで動作するように別のプロセスを使用しただけです。

これを「マニフェスト」ファイルで使用する

 <service android:name=".BackgroundSyncDataService"
        android:process=":my_process">
  </service>

説明 :

名前の前のコロン プレフィックスは、サービスがその宣言アプリケーションに対して非公開であることを Android に伝えます。コロンを使用しない場合、サービスはグローバル プロセスになり、他の Android アプリケーションで使用できます。

独自のプロセスでサービスを実行すると、独自のメモリ アドレス空間が与えられ、このプロセスで仮想マシンのガベージ コレクターがアプリケーション プロセスに影響を与えることはありません。

独自のプロセスでサービスを実行しても、サービスがメイン スレッドで長時間実行される操作を実行する場合、アプリケーションはブロックされません。

于 2016-06-27T05:20:50.083 に答える