1,Service运行在后台,没有界面,不可见,并且优先级要高于Actiivty。
2,和Activity一样,都是运行在主线程中,并且在Activity中 和 Service 中都不能进行耗时的操作,比如访问网络,但是,都可以开启一个新的线程用来进行耗时操作。
3, 和Activity 一样,Service 也是 Context 的一个子类。
1,本地服务(Local Service)
该Service是指一个应用程序内部的Service
---- 可以通过 startService , stopService , stopSelf , stopSelfResult 等方法开启该Service或者关闭该Service
---- 也可以通过 bindService , unBindService 来绑定该Service 或者 解绑该Service
2, 远程服务(Remote Service)
---- 该服务是Android系统中的几个应用程序之间的
---- 要想用Service实现几个应用程序之间的通信,则要定义好IBinder接口来暴露信息
-----Service一旦启动就和启动源没关系了,也就得不到Service对象了
---- 使用startService() 方式启动的Service的生命周期是:
手动调用startService() ---> onCreate() --> onStartCommand() --> 开始运行 ---> 手动调用 stopService() --> onDestory()
public class MyStartService extends Service {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
Log.w("TAG", " ---- onCreate()");
Log.w("TAG", " onCreate() Thread id : "+Thread.currentThread().getId());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
Log.w("TAG", " ---- onStartCommand()");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.w("TAG", " ---- onDestory()");
Log.w("TAG", " onDestory() Thread id : "+Thread.currentThread().getId());
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*
* 使用startService()启动的Service的生命周期是 :
* 手动调用startService() ---> onCreate() --> onStartCommand() --> 开始运行 --->
* 手动调用 stopService() --> onDestory()
*/
}
public void onClick(View view)
{
//经过测试后发现,虽然启动和关闭的是两个Intent,但是操作的却是同一个Service对象
switch(view.getId())
{
case R.id.startId:
Intent intent = new Intent(this, MyStartService.class);
startService(intent);
break;
case R.id.stopId:
Intent intent2 = new Intent(this, MyStartService.class);
stopService(intent2);
break;
}
}
}