44.androidサービスサービスサービス-起動と停止

4137 ワード

Service
バックグラウンドで実行されるコンポーネントで、バックグラウンドで実行するのに適したコードを実行します.インタフェースのないactivityと見なすことができます.
プロセスの優先度:
1.Foreground process:フロントプロセス、
*ユーザと対話中のactivityを持つプロセスonResumeメソッドが呼び出されます.
*ユーザーと対話中のactivityにバインドされたサービスを持つプロセス
*フロントで実行中のサービス-サービスを持つstartforeground()が呼び出されます.
*次の3サイクルメソッドのいずれかを実行するサービス(onCreate()、onStart()、onDestroy()
*onReceiveメソッドを実行しているブロードキャスト受信者を持つプロセス
2.visible process:可視プロセス、
*フォーカスのないactivyが表示され、onPauseメソッドが呼び出されます.
*可視(またはフロント)activityにバインドされたサービスプロセス3を持つ.Service process:startServiceによって開始されたサービス・プロセス
4.background process:非表示のactivity(onStopメソッドが呼び出される)を持つバックグラウンドプロセス
5.Empty process:空のプロセス、アクティブなアプリケーションコンポーネントのないプロセス(activityは終了しました)
サービスのライフサイクル1.Context.を通じてstartService()起動サービス
onCreate()-->onStart()-->onDestroy()
onCreate()は、サービスの作成時に呼び出され、複数のstartService()が呼び出されると、onCreate()メソッドは一度だけ呼び出されます.
onStart()はstartService()呼び出しを開始すると呼び出され、複数回startService()が呼び出され、onStart()メソッドは複数回呼び出されます.
onDestroy()は、サービス終了時に呼び出されます.
2.Context経由bindService()起動サービス
onCreate()-->onBind()-->onUnbind()-->onDestroy()
onBind()は、サービスをバインドするときに呼び出され、bindService()が複数回呼び出されると、onBind()メソッドは1回のみ呼び出されます.
onUnbind()は、バインド解除時に呼び出されます.
	// 
	@Override
	public void onCreate(){
		super.onCreate();
		System.out.println("onCreate ");
	}
	
	// , , , onStartCommand 
	@Override
	public void onStart(Intent intent, int startId){
		super.onStart(intent, startId);
		System.out.println("onStart ");
	}
	
	
	@Override
	public int onStartCommand(Intent intent, int flags, int startId){
		System.out.println("onStartCommand ");
		return super.onStartCommand(intent, flags, startId);
	}
	
	// 
	@Override
	public void onDestroy(){
		super.onDestroy();
		System.out.println("onDestroy ");
	}

サービスのオープンとクローズ
プロファイル:
<service android:name="com.ldw.startService.MyService"></service>

activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" " 
        android:onClick="click"
        />
    <Button 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=" " 
        android:onClick="click2"
        />


</LinearLayout>

MyService.java
package com.ldw.startService;


import android.app.Service;
import android.content.Intent;
import android.os.IBinder;


public class MyService extends Service {


	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}


}


MainActivity.java
package com.ldw.startService;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;


public class MainActivity extends Activity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    public void click(View v){
    	// 
    	Intent intent = new Intent(this, MyService.class);
    	startService(intent);
    }
    
    public void click2(View v){
    	// 
    	Intent intent = new Intent(this, MyService.class);
    	stopService(intent);
    }
    
}