1. 前言
Service和Activity是类似的,不同点就是Service在后台操作,不与UI进行交互,不依赖于任何用户界面,比如启动服务播放音乐
尽管Service在后台运行,但它仍然运行在Main Thread中,因此不能用来做耗时的动作,那么只能在服务中开一个线程,用来做耗时动作
2. 开发步骤
1. 继承Service类
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
public int onStartCommand(Intent intent,int flags,int startID){
Toast.makeText(this,"Service Started",Toast.LENGTH_LONG).show();
return START_STICKY;
}
public void onDestory(){
super.onDestroy();
Toast.makeText(this,"Service Destoryed",Toast.LENGTH_SHORT).show();
}
}
2. 配置清单
在AndroidMainifest.xml里面配置该Service,当然在Android Studio里面可以自动配置了
<service
android:name=".MyService"
android:enabled="true"
android:exported="true"></service>
当然,如果希望本服务被其他的应用程序使用
<service android:name=".MyService">
<intent-filter>
<action android:name="net.learn2develop.MyService"/>
</intent-filter>
</service>
3. 启动服务
启动服务可以通过调用Context.startService()或者Context.bindService()方法启动服务。
其中startService()方法启动服务,访问者与服务之间没有关联,即使访问者退出了,服务仍在运行。
而bindService()方法启动服务,那么访问者与服务绑定在一起,访问者退出后,服务也就终止了。
先说第一种startService方法:(第二种下篇)
Intent intent=new Intent(getBaseContext(),MyService.class);
//启动服务
startService(intent);
//停止服务
stopService(intent);
3. 例子
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Intent intent=new Intent(getBaseContext(),MyService.class);
Button btstart=(Button)findViewById(R.id.button1);
Button btstop=(Button)findViewById(R.id.button2);
btstart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//启动服务
startService(intent);
}
});
btstop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//停止服务
stopService(intent);
}
});
}
}
分别按下启动,启动,停止,启动服务时,logcat显示为
可以看到:
当首次启动服务,会执行onCreate()以及onStartCommand()函数
当服务以及被创建下再次启动服务,只会执行onStartCommand()函数
相关链接
Android-服务Service(1)-介绍及startService调用
Android-服务Service(2)-bind绑定Service及两种生命周期
Android-服务Service(3)-IntentService