【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); }
関連記事
-
-
【andoid】ViewPagerを使う
1. layout.xmlにViewPagerを配置 2. PagerAdapter.jav
-
-
【android】アニメーション
Viewにアニメーションを付加する方法です。 目次 アニメーションの実行 de
-
-
【android】 adbコマンド集
●adbサービス起動 adb start-server ●adbサービス終了 adb
-
-
【android】アプリ内課金を実装する
アプリ内課金のサンプルコードを解析します。 参考URL 公式API Android
-
-
【android】ホーム画面や他のアプリの前面にViewを表示する。
WindowManagerのTYPE_SYSTEM_ALERTのレイヤーにViewを表示することで、
-
-
【android】標準の設定画面を作る
設定画面のテンプレートです。 検索一発クンのコードから抜粋しました。 チェックボックス、リス
-
-
【android】複数のカスタムテーマを設定で切り替える
背景色やアプリ全体のテーマ色を設定で変更したいという要望をもらったので実装してみました。
-
-
【android】 webviewでassetsのリソースを使用する
webviewでassets内のリソースにアクセスするには file:///android_a
-
-
【android】Activityとプロセスのライフサイクル
またもやライフサイクル周りでハマったのですが、Androidのライフサイクルは複雑で困ります。 G
-
-
【android】 setOnClickListener(false)が効かない
間違いその1 OnClickListenerが登録されているViewにsetClickable