Wi-Fi 接続を介して外部デバイスからデータを収集するアプリケーションを開発しています。私はスレッドを使用してジョブを実行し、データをデータベースに保存します。
スレッドをカスタム アプリケーション クラス (シングルトンとして管理) に配置することをお勧めしますか? または、フォアグラウンド サービス内に配置した方がよいでしょうか。
Wi-Fi 接続を介して外部デバイスからデータを収集するアプリケーションを開発しています。私はスレッドを使用してジョブを実行し、データをデータベースに保存します。
スレッドをカスタム アプリケーション クラス (シングルトンとして管理) に配置することをお勧めしますか? または、フォアグラウンド サービス内に配置した方がよいでしょうか。
このようなもののために構築されたAsyncTaskを使用することができます。UIスレッドをブロックすることはなく、ネットワークとストレージをバックグラウンドで実行します。
必要な場合のチュートリアルは次のとおりです。
https://androidresearch.wordpress.com/2012/03/17/understanding-asynctask-once-and-forever/
IntentService を使用します。IntentService は別のバックグラウンド スレッドを使用するため、UI スレッドをブロックしません。すべてのアクティビティがバックグラウンドにある場合でも持続します。AsyncTask の問題は、アクティビティが終了すると終了することです。IntentService を使用すると、ダウンロードは完了するまで楽しく実行されます。
Android のスレッディングを本当に理解していて、快適に感じられる場合は、独自のスレッドを作成できます。ただし、IntentService を使用する方がはるかに簡単であることがわかります。唯一の欠点は、IntentService スレッドを中断できないことですが、ほとんどの開発者がその機能を必要としているとは思えません。
IntentService からアプリ内の他のコンポーネントと通信するには、LocalBroadcastReceiver を使用します。UI に「通信」するには、通知を使用します。