【android】サービスの実装
公開日:
:
最終更新日:2013/03/21
android
ダウンロードなどActivityに依存したくない大きなバックグラウンド処理や常駐プロセスを作りたい場合、サービスを利用します。
サービスは大別すると
- Intentから起動する実装
- Bindを利用した実装
特徴:実装がシンプル。
用途:単純に長時間かかる処理をバックグラウンドで行いたい場合等に使用します。
実例:ダウンロードやバックアップ処理など
特徴:実装が少し複雑
用途:常駐プロセスや、Activity内からサービスを操作したりサービスの処理結果を受け取りたい場合に使用します。
実例:音楽プレイヤー
Bindを利用した例
編集・作成するファイル
- IBindService.aidl
- BindService.java
- MyApp.manifest
- MyApp.java
サービスのインターフェイスをaidlファイルで定義
aidlで定義したメソッドを実装
サービスをマニフェストに登録
Activityからサービスを起動する
IBindService.aidl
interface IBindService{ void start(); void echo(String txt); void finishService(); }
BindService.java
public class BindService extends Service{ private final Context con = this; private final String TAG = BindService.class.getSimpleName(); private final IBindService.Stub binder = new IBindService.Stub() { //IBindService.aidlで定義したメソッドを実装 public void echo(final String message) throws RemoteException { } }; @Override public void onCreate(){ super.onCreate(); } @Override public void onStart(Intent intent, int startId){ super.onStart(intent, startId); } @Override public boolean onUnbind(Intent intent){ super.onUnbind(intent); return false; } @Override public void onDestroy(){ super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return binder; } }
マニフェストファイル
<service android:name=".BindService" android:process=":name" android:exported="false" > <intent-filter> <action android:name="com.full.package.name.IBindService" /> </intent-filter> </service>
サービスを実行するActivity
//サービスと接続されたオブジェクト IBindService ibService = null; ServiceConnection serviceConnection; private void bindService(){ //接続処理を定義 serviceConnection = new ServiceConnection(){ public void onServiceConnected(ComponentName name, IBinder service) { ibService = IBindService.Stub.asInterface(service); } public void onServiceDisconnected(ComponentName name) { } }; final Intent intent = new Intent(IBindService.class.getName()); //サービスにバインドする。BIND_AUTO_CREATEを指定するとでサービスが起動していない場合は起動してからバインドするようになる。 this.bindService(intent, serviceConnection, BIND_AUTO_CREATE); } private void serviceMethod(){ try { ibService.echo("text"); } catch (RemoteException e) { e.printStackTrace(); } } private void unBind(){ Intent intent = new Intent(IBindService.class.getName()); act.unbindService(serviceConnection); act.stopService(intent); }
関連記事
-
-
【android】アプリ内課金を実装する
アプリ内課金のサンプルコードを解析します。 参考URL 公式API Android
-
-
【android】リソースからいろいろ取得する
リソースで定義したいろいろをコード内で呼び出す方法です。 レイアウト //リソースからレ
-
-
【android】任意のスレッドで処理を行う
非UIスレッドでUIを操作したい場合に、任意の処理をUIスレッド上で実行する。 目次
-
-
[android] ActivityとFragmentのライフサイクルいろいろ
Fragmentを使い始めてライフサイクル関係でハマることがあったので備忘録。 FragmentA
-
-
【android】stringsリソースにパラメータを埋め込む
●strings.xml %n$x n : 引数に渡す際の順番。n番目の引数。 x
-
-
[android] モンキーテスト(Monkey Test)を実行する
最近テストの効率化に目覚めました。 モンキーテストは猿にアプリを渡してみてめちゃくちゃな操作をさせ
-
-
【android】ホーム画面や他のアプリの前面にViewを表示する。
WindowManagerのTYPE_SYSTEM_ALERTのレイヤーにViewを表示することで、
-
-
アプリ間連携 Intentfiler
ブラウザの共有からURLを受け取る。 Manifest.xmlのURL受け取り先のactivity
-
-
[android] JSONのパースにかかる時間
リストデータなんかを保存したいというのはよくある要件だと思います。 DBは面倒だしカラム毎に集計す