这篇博文来介绍Android另一个十分重要的组件,Service。Service和Activity很类似,区别在于它运行在后台,不可见且没有界面。Service的优先级高于Activity,当系统负载过大时,会优先杀死Activty,但Service很难被系统清除。需要注意的是,Service同样运行在主线程中,不能直接进行耗时操作,而是需要在服务中新开一个线程,在该线程中做耗时操作。Service主要分为本地服务和远程服务。我们先来学习本地服务。
服务的启动方式
Service的启动方式主要有两种:Start方式和Bind方式,我们先来看这两种方式的特点
Start方式:
1.服务跟启动源没有任何联系
2.无法得到服务对象
Bind方式:
1.通过Ibinder接口实例,返回一个ServiceConnection对象给启动源
2.通过ServiceConnection对象的相关方法可以得到Service对象
我们这篇博文,先来介绍Start方式启动服务
Start方式启动服务
和启动Activity很类似,Service也是通过Intent来启动和停止,具体代码如下:
switch (view.getId()) { case R.id.start_bt: startintent=new Intent(MainActivity.this,StartService.class); startService(startintent); break; case R.id.stop_bt: stopService(startintent); break; }
启动,自定义的StartService类继承于Service类:
public class StartService extends Service { @Override public void onCreate() { Toast.makeText(getApplicationContext(),"start_service",Toast.LENGTH_SHORT).show(); super.onCreate(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(getApplicationContext(),"startcommand_service",Toast.LENGTH_SHORT).show(); return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { Toast.makeText(getApplicationContext(),"stop_service",Toast.LENGTH_SHORT).show(); super.onDestroy(); } @Nullable @Override public IBinder onBind(Intent intent) { return null; } }
需要注意的是,onCreate方法,只会在Service第一次被创建时调用,在Service未被停止之前,多次StartService只会调用onStartCommand方法。
最后别忘了在Manifest文件中注册Service:
<service android:name=".StartService"></service>