服务--service
1.含义:
服务是Android四大组件之一,与Activity一样,代表可执行程序,service不像Activity有可以操作的用户界面,一直是在后台运行,如果某个组件需要在运行时向用户呈现可操作的信息就应该选择Activity,否则应该选择Service
2.作用:
2.1:和广播类一起使用,开机启动服务监听系统的所有通讯
2.2:因为没有操作界面,在后台播放音乐
2.3:木马程序
2.4:默默的收集系统信息、在后台发送邮件等等
3.本地服务:
生命周期(一个本地服务可以被开启动多次,但是只会被创建一次,销毁也只会执行一次):
开始 :startService(Intent intent)
结束:a、stopService(Intent intent);
b、stopSelf(); 表示不管调用了多少次startService(),都会停止服务
c、stopService(int starId); 标记当前的这一次startService()停止,等到所有的startService()都停止的时候。停止服务
4.注意事项:
如果需要执行耗时操作时,那么就要把耗时操作放在子线程中执行,如果在线程执行的过程中停止服务,那么这个线程并不会跟着停止,主线程的宿主不是Service而是main Thread主线程,所以在启动子线程时,要考虑如何去控制子线程
5.如何创建本地服务:
写一个类继承Service类,然后在重写几个生命周期方法
public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) { //远程监控
Log.i("test","onBind");
return null;
}
@Override
public void onCreate() { //服务创建时被调用
super.onCreate();
Log.i("test","onCreate");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) { //实现业务方法
new MyThred(startId).start();
return super.onStartCommand(intent, flags, startId);
}
class MyThred extends Thread{
private int startId;
public MyThred(int startId) {
this.startId = startId;
}
@Override
public void run() {
super.run();
for (int i = 0; i <10 ; i++) {
Log.i("test","onStartCommand"+i);
SystemClock.sleep(1000);
}
//停止服务
//stopSelf(); //第一个线程完毕则会销毁
stopSelf(startId); //当所有线程完毕则会销毁
}
}
@Override
public void onDestroy() { //销毁方法
super.onDestroy();
Log.i("test","onDestroy");
}
}
如果你不想使用这个方法的话还可以类继承IntendService,只要重写一个方法和一个构造方法就可以了,耗时操作就直接写在onHandleIntent方法里面,它的启动服务是有序的。然后在配置下设置就可以了