たぼさんの部屋

いちょぼとのんびり

SECTION232 インテントによりサービスを起動する(別プロセス)

f:id:donsuka_kk:20121211133456p:plainf:id:donsuka_kk:20121211133507p:plain

別プロセスで起動する場合は

サービスを起動した際に、プロセスを起動元とは異なる別のプロセスで実行したい場合には
AndroidManifest.xmlのServiceタグに
Android:process=":XXXXXXXXX"を記述します。
(XXXは任意)
^^^^^^^^^^^^
そうすれば
DDMSの画面で複数のプロセスが起動していることが確認できる

「:」を忘れないように!

f:id:donsuka_kk:20121211134824p:plain

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>