Service是android 系统中的一种组件,它跟Activity的级别差不多,但是他不能自己运行,只能后台运行,并且可以和其他组件进行交互。Service的启动有两种方式:context.startService() 和 context.bindService()。
使用context.startService() 启动Service是会会经历:
context.startService() ->onCreate()- >onStartCommand()->onStart()->Service running
context.stopService() | ->onDestroy() ->Service stop
如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。
所以调用startService的生命周期为:onCreate --> onStart(可多次调用) --> onDestroy
下面代码为startService()方法启动服务:
MainActivity:
package com.test.servicedemo;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
//import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
//import android.support.v4.app.NavUtils;
public class MainActivity extends Activity
{
private Button btn_Start;
private Button btn_Stop;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_Start = (Button) findViewById(R.id.StartService);
btn_Stop = (Button) findViewById(R.id.StopService);
btn_Start.setOnClickListener(listener);
btn_Stop.setOnClickListener(listener);
}
private View.OnClickListener listener = new View.OnClickListener()
{
@Override
public void onClick(View v)
{
Intent intent = new Intent(MainActivity.this, ExampleService.class);//不可以把这句写在方法外面
// TODO Auto-generated method stub
switch (v.getId())
{
case R.id.StartService:
startService(intent);
break;
case R.id.StopService:
stopService(intent);
break;
}
}
};
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
ExampleService:
package com.test.servicedemo;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;
public class ExampleService extends Service
{
private static final String TAG = "ExampleService";
@Override
public void onCreate()
{
// TODO Auto-generated method stub
super.onCreate();
Log.i(TAG, "ExampleService-->onCreate");
}
@Override
public void onDestroy()
{
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, "ExampleService-->onDestroy");
}
@Override
public void onStart(Intent intent, int startId)
{
// TODO Auto-generated method stub
super.onStart(intent, startId);
Log.i(TAG, "ExampleService-->onStart");
}
@Override
public IBinder onBind(Intent intent)
{
// TODO Auto-generated method stub
return null;
}
}