[Android] IntentServiceでバックグラウンド処理を簡単に実行させる

Serviceはバックグラウンドで動作してくれるので別スレッドで実行しているのかと思ってしまいます。バックグラウンドという特性からすると別スレッドでと思うのですが実際はメインスレッドを使っているのですね。

IntentServiceは最初からそれを想定して作られています。またワークキューを使った順次処理を行えます。
 
intentservice 01 - [Android] IntentServiceでバックグラウンド処理を簡単に実行させる

Android Studio 3.1.4
API 28

 



IntentService

 
Googleのドキュメントにはこのようにあります。

サービスは、そのホスト プロセスのメインスレッドで実行します。サービスが自身のスレッドを作成することはなく、別のプロセスで実行されることもありません(別の方法を指定しない限り)。 つまり、サービスが CPU を集中的に使ったり、ブロック操作を行ったりするような場合(MP3 の再生やネットワーク作業)は、サービス内に新しいスレッドを作成してその作業を行う必要があります。

Ref: サービス | Android Developers
 
簡単に別スレッドを使うことができるのがIntentServiceです。
更にワークキューを使って要求されたタスクを一つづつ実行し、
全てが終わると自ら終了してくれます。
 

 

別スレッドとワークキュー

 
IntentServiceは簡単には以下のようになります。
コンストラクタが必要でスレッドの名前を設定します。
 

 
別スレッドでの処理はあくまでキューに入れられたIntentの順番
intentservice 01 - [Android] IntentServiceでバックグラウンド処理を簡単に実行させる
 
作業が終わってもServiceではstopSelf() や stopService() を呼び出して自身でサービスを停止しないと行けない場合がありますが、IntentServiceでは必要がありませんが、これは楽ですね。

 

サンプルコード

 
サービス | Android Developers
にある例を元に簡単なIntentServiceを作ってみます。
 
MainActivity.java

 
IntentServiceの記述
1秒のスリープを入れて10回カウントしたら終了させます。
onCreate(), onStartCommand(), onDestroy() などは特にこのケースでは必要ないのですが
ワーカー スレッドの生存状態を正しく処理できるよう、必ず super を実装しないといけないようです。

TestIntentService.java

 
Serviceの登録も忘れずに

AndroidManifest.xml

 
レイアウトとリソースです
activity_main.xml

 
strings.xml

 
IntentServiceのログをみると確かにタスクが終わると終了しているようです。
 

 

Gameの効果音

 
例えばゲームで効果音を出したいときに、メインスレッド思い画像処理などをしているケースでは別スレッドでやりたいところです。
IntentServiceを使うとどうでしょうか、SoundPoolを使って効果音の再生を試してみましょう。
SoundPoolの使い方はこちらを参考にして、このコードをIntentServiceに組み込んでみます。
 

soundpool 00 100x100 - [Android] IntentServiceでバックグラウンド処理を簡単に実行させる
音を扱うクラスとしてSoundPoolがあり、比較的短いものを遅延が少なく再生できるのでゲームの効果音の再生などに向いています。   下...

 
注意点は、MediaPlayerでもそうですが、音声データがダウンロードされてから再生を始めるという点です。
ロードが終わったかどうかを調べるのには、リスナーをセットしてonLoadCompleteから返されるステータスが0の時です。
SoundPool.OnLoadCompleteListener
 
MainActivity.javaおよびレイアウトなどは同じです。
TestIntentService.java

 
SoundPoolのR.raw.oneはone.wavをresource¥raw 以下に配置したものです。
 
 
関連ページ:

 

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加




アプリ開発が上達するお勧め

アプリ開発を始めたけどわからないところがあり、誰かに聞きたいけど周りにはそんな人はいない…あるいは、会社で働いていて日中そんなに時間をとれないなど、オンラインのプログラミングスクールがいいでしょう、時間の制約がないところが一番の魅力です。

以下の3つはAndroidが学習できるオンラインスクールです。


TECH ACADEMY
Androidアプリコース



侍エンジニア塾
侍エンジニア塾 無料体験レッスン



CodeCamp
~約8,000名の受講生と80社以上の導入実績~
現役エンジニアのオンライン家庭教師CodeCamp





正直ネットや本では限界があります。直接(ネットで)誰か分かる人に聞いた方が早く解決して、上達も早いと思います。

尚、スクールがダメだと言う人がいますが、やる気があれば問題ありません。与えられるのを待っていてはいけないですね
欲しいものは取りに行くのです。


Google Pixel 3 XLグローバル版
SIMフリー 並行輸入品
6.3インチの大画面
背景をぼかすポートレートモード撮影


Anker PowerCore II Slim 10000
Power IQ 2.0搭載
iPhone & Android対応

シェアする

  • このエントリーをはてなブックマークに追加

フォローする