SECTION232 インテントによりサービスを起動する(別プロセス)
別プロセスで起動する場合は
サービスを起動した際に、プロセスを起動元とは異なる別のプロセスで実行したい場合には
AndroidManifest.xmlのServiceタグに
Android:process=":XXXXXXXXX"を記述します。
(XXXは任意)
^^^^^^^^^^^^
そうすれば
DDMSの画面で複数のプロセスが起動していることが確認できる
「:」を忘れないように!
Main.java
package com.efolab.s232; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.widget.LinearLayout; public class Main extends Activity { Context context; LinearLayout base; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getApplicationContext(); base = new LinearLayout(context); setContentView(base); //明示的インテント Intent intent = new Intent(context , SampleService.class); //サービスの起動 context.startService(intent); } }
SampleService.java
package com.efolab.s232; import android.app.Service; import android.content.Context; import android.content.Intent; import android.os.IBinder; import android.widget.Toast; public class SampleService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } Context context; @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); context = getApplicationContext(); // 開始時にトースト Toast.makeText(context, "サービス開始しました", Toast.LENGTH_SHORT).show(); Thread thread = new Thread(){ public void run(){ try{ Thread.sleep(10000); // 自分自身を止めてonDestroy()メソッドへ stopSelf(); }catch(InterruptedException e){ e.printStackTrace(); } } }; thread.start(); } //終了時 public void onDestroy(){ Toast.makeText(context, "サービスを修了しました", Toast.LENGTH_SHORT).show(); } }
Manifest
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.efolab.s232" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="Main"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> <!-- サービスクラスの登録 --> <!-- 別プロセスで起動 --> <service android:name="SampleService" android:process=":anotherProcess" /> </application> </manifest>