一、使用Service
1、什么是Service以及Service的配置项:
Service是Android组件的一种,派生自android.app.service类。它不提供交互界面,只是在后台运行,进行功能调度或提供数据支持。
<!--android:enabled—是否启用,android:exported—是否导出-->
<service android:name=".MyService" android:enabled="true" android:exported="true"></service>2、启动/停止Service(MainActivity.java)
public class MainActivity extends AppCompatActivity {
private Intent intent; // Intent只是用来配置程序要启动service的信息 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(MainActivity.this,MyService.class); // 服务的实例在一个操作系统上只有一个 findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startService(intent); //启动服务 } }); findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { stopService(intent); //停止服务 } }); } }3、onStartCommand方法(MyService类继承自Service)
@Override public int onStartCommand(Intent intent, int flags, int startId) { //在外界执行了StartService后执行 new Thread(){ @Override public void run() { super.run(); while (true){ System.out.println("服务正在运行..."); try { sleep(1000); //休眠一秒 } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); return super.onStartCommand(intent, flags, startId); } 二、绑定Service(启动服务可以使用绑定服务的方式来启动)
1、多个按钮都要实现监听功能(MainActivity.java)
findViewById(R.id.btnStartService).setOnClickListener(this); findViewById(R.id.btnStopService).setOnClickListener(this); findViewById(R.id.btnBindService).setOnClickListener(this); findViewById(R.id.btnUnbindService).setOnClickListener(this); @Override public void onClick(View v) { switch(v.getId()){ case R.id.btnStartService: startService(intent); break; case R.id.btnStopService: stopService(intent); break; case R.id.btnBindService: //第二个参数this表示服务的链接,侦听服务的状态 bindService(intent,this, Context.BIND_AUTO_CREATE); break; case R.id.btnUnbindService: unbindService(this); break; } } @Override public void onServiceConnected(ComponentName name, IBinder service) { //服务被绑定成功后执行 System.out.println("Service Connected"); } @Override public void onServiceDisconnected(ComponentName name) { //服务所在进程奔溃或杀掉时执行 }
2、MyService.java:
@Override public IBinder onBind(Intent intent) { return new Binder(); //实现了IBinder接口 }
三、Service生命周期
1、服务的生命周期主要有两个,分别是创建(onCreate)和销毁(onDestroy)。
public int onStartCommand(Intent intent, int flags, int startId) { //点击启动服务按钮,onStartCommand会不断重复执行 System.out.println("onStartCommand"); return super.onStartCommand(intent, flags, startId); } public void onCreate() { //点击启动服务按钮,onCreate会执行一次 super.onCreate(); System.out.println("Service create"); } public void onDestroy() { super.onDestroy(); System.out.println("Service destroy"); }
(同时启动服务并绑定服务时,必须同时停止服务并解除绑定服务。
启动服务后退出Activity,并不会销毁程序,但是,如果Activity和Service绑定,退出Activity,会取消同Service的绑定。)
2、Service小程序(MyService.java)
private boolean serviceRunning = false;
public void onCreate() { super.onCreate(); System.out.println("Service create"); serviceRunning = true; new Thread(){ @Override public void run() { super.run(); while (serviceRunning){ System.out.println("服务正在运行..."); try { sleep(1000); //休眠一秒 } catch (InterruptedException e) { e.printStackTrace(); } }} }.start(); } public void onDestroy() { super.onDestroy(); System.out.println("Service destroy"); serviceRunning = false;
}