您的位置:首页 > 其它

四大基本组件之Services

2016-01-12 22:25 435 查看
什么是Services,Services什么用?

Services是在后台运行,没有可视化的用户界面的程序。(Android系统现已经不允许只有Services的Android程序了,所以一个Android应用必须要有界面(有Activity)才能正常运行)
最容易理解的实例就是音乐播放器。如果把播放音乐的代码写在Activity里是不行的,当点击播放后退出界面到别的应用时音乐就不能继续播放了,因为Activity变得不可见了。后台播放音乐,这时就需要用Services了。

如何用Services
有两种方法启动Services服务程序,一种是通过Context.startService()来启动(通过调用Context.stopService()结束);另一种是通过调用Context.bindService()方法建立(调用
Context.unbindService()关闭),两种方法不同在于第二种调用要附着在别的程序上,比如mainActivity,Service通过暴露接口和mainActivity协同工作。同样用音乐播放器的实例来说明,Service暴露接口暂停、回退、停止等等播放音乐的接口给Activity从而让用户控制播放。

两种不同方法启动的Services生命周期是不一样的:



void onCreate()
void onStart(),这个方法已经是不推荐使用的了


取代的应该是onStartCommand()这个方法

void onDestroy()

IBinder onBind(Intent intent)
boolean onUnbind(Intent intent)
void onRebind(Intent intent)

onCreate()和onDestroy()方法在两种生命周期中都有,也是做初始化和首尾的工作。

主要不同点在于用Context.bindService()启动的服务的生命周期中有onBind(),这里可以将设置好的信息传递给Service,而onUnbind()则可以可以将Services得到的结果返回回去,l另外通过调用onRebind()则可以继续进行Service。

不过要注意的是虽然用生命周期可以这么吧Service分为两种,但其实任何服务都可以接受onBind()和onUnbind()调用,两种生命周期是可能混杂在一起的。

这里可以继续使用日志工具进行理解熟悉。
新建一个MyService类
(智能的Android-Studio已经帮我们自动设置好了清单中的配置,这是建立所Activity和Service所必须的)



写一些生成日志的代码
@Override
public void onCreate() {
super.onCreate();
Log.d("running", "Service onCreate() running");
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("running", "Service onStartCommand() running");
return super.onStartCommand(intent, flags, startId);
}

@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
Log.d("running", "Service onBind() running");
throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public boolean onUnbind(Intent intent) {
Log.d("running", "Service onUnbind() running");
return super.onUnbind(intent);
}

@Override
public void onRebind(Intent intent) {
Log.d("running", "Service onRebind() running");
super.onRebind(intent);
}

@Override
public void onDestroy() {
Log.d("running", "Service onDestroy() running");
super.onDestroy();
}


然后在MainActivity中启动这个MyService
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Log.e("running", "Activity onCreate() running");
Intent intent = new Intent(this, MyService.class);
startService(intent);
stopService(intent);
}

通过绑定启动service的代码比较麻烦,先略过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: