Service初步

上一篇 / 下一篇  2016-08-25 11:18:44 / 个人分类:安卓开发

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>



TAG:

 

评分:0

我来说两句

Open Toolbar