Android重要组件之一 Service 服务讲解学习(一)
在Android有异步处理需要重要的Service和Handler组件,今天首先学习一下Service组件,
其中涉及到Android Service中进程间通信和bindService()的方法下一次在讲解学习
1:首先来看看在文档中对于Service的概念的解释:
Service是Android系统中的一种组件,重要性可以堪比Activity,但是也有显著的区别,Activity可以和用户进行交互,但是Service只能运行在后台,不能和用户直接交互;
当我们退出应用的时候,Service还会在后台运行,进程不会结束;特别注意我们需要使用的Service的时候,我们需要在AndroidManifset.xml文件的service标签进行注册
然后我们我们有两种启动Service的方法包括(①:Context.startService() 和②:Context.bindService()
2:需要使用Service的地方:
在文档中举了下面两个例子
最让我们想到的是应该是播放器的时候,我们可能需要边听歌边干些其他的事情,此时我们会退出播放器的应用,如果不适用Service的话,一退出应该应用我们就不能听歌了;还有比如我们需要通过网络获取数据,由于使用网络获取数据的速度比较慢,此时我们可以使用Service来在后台进行获取更新,隔一段时间把获取到的数据发回,而不是让我每次要获取数据都要打开应用;
3:Service与Activity通信:
Service后端的数据最终还是要呈现在前端Activity之上的,
在启动Service的时候,文档中这样描述:Note that services, like other application objects, run in the main thread of their hosting process
主要该Service,和其他应用对象一样,运行其应用进程主线程上
4:Service 启动方式:
一、context.startService()
二、context.bindService();
使用Service之前必须在AndroidMainfest.xml 中使用<service android:name=".service的类名"/>进行注册
5:Service的使用方法(我今天主要学习的是startService)
第一步:自己写一个继承Service类的类
第二步:在AndroidMainfest.xml文件中进行注册
第三步:startService()
6:生命周期:
首先看下声明周期的运行图
①:context.startService() 启动Service是会经历一下几个方法
启动的时候:context.startService() ---> onCreate() ---> onStartCommand()
销毁的时候:ontext.stopService() ---> onDestroy();
如果Service没运行,则此时会先调用onCreate()方法,然后再调用onStartCommand();
如果Service已经在运行,则只调用onStartCommand(),Service的onStartCommand(),方法可能会调用多次
②:
启动时候:context.bindService() ---> onCreate() --->onBind();
销毁的时候:onUnibind() ---> onDestroy()
onBind() 将会給客户端返回一个IBind接口的实例,此时客户端可以去调用服务的方法,不过此时Activity与Service算是绑定在一起了
意思是说如果Activity退出,那么此时的Service也会退出
接下来是实例Demo:
继承Service的方法:
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class ServiveTest extends Service {
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
System.out.println("onCreat------->");
super.onCreate();
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
System.out.println("onDestroy------->");
super.onDestroy();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("onStartCommand------->");
return super.onStartCommand(intent, flags, startId);
}
}
今天就初步学习了一下Service的使用context.startService()的方法,下一次会进行使用context.bindService()和进程间通信的学习
摘自 寒夜---菜鸟学习之路
补充:移动开发 , Android ,