service:没有界面,不可见,后台运行,通常处理耗时长的操作(下载,播放mp3等等),更高妙的:可以使用service更新Content provider,发送intent以及启动系统的通知,编程具体例子可见
插一句:如果你前面学习的广播接收器,你接收到消息,在onreceive函数中处理的时候,如果你处理的动作超过了10几s,就一定会报错,anr, 会吧别的程序都柱塞了,所以service应运而生
进程与线程:
进程是一个单独的,占用了cpu,内存以及可能的系统资源的一个东东,进程里包含若干线程,由cpu调度算法去依次执行
线程包含于进程之中,没有它自己可以占用的单独的cpu啊这些资源,线程只能从自己所在的进程中去拿资源
service不是一个单独进程也不是一个单独线程,意思就是它和你的app是在同一个进程和线程中运行的
service生命周期:
JieService extends Service{
//继承自安卓service类,需要复写它的一些函数:
@Override
public IBinder onBind(Intent intent){
//和service要绑定的activity写在一起,后面细讲
System.out.println("绑定姐的service");
}
@Override
public void onCreate(){
//由Context.startservice(Intent)触发
super.onCreate();
System.out.println("姐的service create了~");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId){
//接收一个intent,这个intent就是外面用service的时候Context.startservice(Intent)传进来的intent,就是外面用service
可能需要传递一些参数给service,就用这个intent去传,比如,我在我的activity上编写了一个播放mp3的文件,intent就可以吧文件位置之类的传给service,叫service去做这种耗时长的工作。 所以我理解,这个onStartCommand才是真正做事情的函数,
System.out.println("姐的service onStartCommand了~");
return START_NOT_STICKY;
}
@Override
public void onDestroy(){
//销毁姐创建的service,在调用service的代码里用Context.stopservice()触发
System.out.println("姐的service 销毁了~");
super.onDestroy();
}
}
同样记得写好代码要去mainfest里注册service:
<service android:name=".JieService"></service>