Activity是与用户打交道的,而Service是在后台运行的。

这个程序介绍了下如何启动和停止一个Service,以及在后台打印消息,我添加了一些注释。

在activity_main中将布局改为线性布局,方向改为垂直并添加两个按钮,

 android:orientation="vertical"
<Button
android:layout_width="69dp"
android:layout_height="wrap_content"
android:text="启动服务"
android:id="@+id/btnStartService"
android:layout_weight="0.06" />
<Button
android:layout_width="69dp"
android:layout_height="wrap_content"
android:text="停止服务"
android:id="@+id/btnStopService"
android:layout_weight="0.06" />

在MainActivity中

 intent = new Intent(MainActivity.this,MyService.class);//启动另一个活动

        findViewById(R.id.btnStartService).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startService(intent);
}
}); findViewById(R.id.btnStopService).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopService(intent);
}
});

在MyService中,负责在后台打印消息,注意如何创建一个线程:

 public int onStartCommand(Intent intent, int flags, int startId) {
//startService()启动时,这个函数自动启动
new Thread(){
//创建一个新线程
@Override
public void run() {
super.run(); while (true) {
System.out.println("服务正在运行..."); try {
sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
return super.onStartCommand(intent, flags, startId);
}

具体参考: http://www.jikexueyuan.com/course/683.html

接下来讲的是绑定Service。课程只讲了怎么用,但没有讲为什么用。整个过程和上节差不多,定义两个按钮来监听启动绑定Serivce功能。

在MainActivity中,增加两个按钮(注意接口监听的方式,和用匿名类的方式进行对比)

 //采用接口的方式,下面要实现相应的接口
findViewById(R.id.btnBindService).setOnClickListener(this);
findViewById(R.id.btnUnbindService).setOnClickListener(this);
public void onClick(View v) { switch (v.getId()){
case R.id.btnStartService:
startService(intent);
break;
case R.id.btnStopService:
stopService(intent);
break;
case R.id.btnBindService:
//第二个参数要求一个ServiceConnection,实现两个接口 bindService(intent,this, Context.BIND_AUTO_CREATE);
break;
case R.id.btnUnbindService:
unbindService(this);
break;
}
} //实现的两个接口
@Override
public void onServiceConnected(ComponentName name, IBinder service) { System.out.println("System connected!");
} @Override
public void onServiceDisconnected(ComponentName name) { }

同时在MyService的onBind函数中,修改其返回值。

@Override
public IBinder onBind(Intent intent) {
return new Binder();
}

Service生命周期

服务的生命周期涉及到两个函数,onCreate()和onDestroy()。按下启动服务和绑定服务时,第一个会被调用;反之,第二个会被调用。如果同时按下启动和绑定服务,只需要同时解除绑定

和停止服务,onDestroy()才会被调用。

按下启动服务,按返回键(退出activity)后,服务仍会运行;但对于绑定服务,服务却会退出运行(绑定就是activity和服务之间的事啊!)。

 @Override
public void onCreate() {
super.onCreate();
System.out.println("Service Create");
} @Override
public void onDestroy() {
super.onDestroy(); System.out.println("Service destroy"); }

当不断按下启动服务时,onCreate只会调用一次,但onStartCommand()函数每次都会被调用(startService()每次都会调用它)。

												

Service(一):认识service、绑定Service的更多相关文章

  1. Android中AIDL的理解与使用(二)——跨应用绑定Service并通信

    跨应用绑定Service并通信: 1.(StartServiceFromAnotherApp)AIDL文件中新增接口: void setData(String data); AppService文件中 ...

  2. Android中AIDL的理解与使用(一)——跨应用启动/绑定Service

    AIDL(Android Interface Definition Language)--安卓接口定义语言 一.startService/stopService 1.同一个应用程序启动Service: ...

  3. android Activity绑定Service

    activity可以绑定Service,并且可以调用Service中定义的方法 Service代码:在里面多了一个IBinder;个人理解是用来与Activity绑定的主要通道: public cla ...

  4. Service的启动,绑定,绑定后通信,跨应用绑定,跨应用绑定后通信

    Service介绍: 与Acitivity平级的Android四大组件之一,对比Activity而言,就是没有交互界面,且可以一直在后台执行,只用于处理下载,I/O等长时间信息交流的任务. Servi ...

  5. Android Service总结04 之被绑定的服务 -- Bound Service

    Android Service总结04 之被绑定的服务 -- Bound Service 版本 版本说明 发布时间 发布人 V1.0 添加了Service的介绍和示例 2013-03-17 Skywa ...

  6. Android 绑定Service并与之通信

    1.绑定service 2.实现方法 3.在Androidmanifest.xml文件中配置service <service android:name=".Myservice" ...

  7. Service和Thread的关系及如何启用Service,如何停用Service

    Service和Thread的关系: 不少Android初学者都可能会有这样的疑惑,Service和Thread到底有什么关系呢?什么时候应该用Service,什么时候又应该用Thread?答案可能会 ...

  8. Android Service 服务(一)—— Service .

    http://blog.csdn.net/ithomer/article/details/7364024 一. Service简介 Service是android 系统中的四大组件之一(Activit ...

  9. 如何启动Service,如何停用Service(转)

    如何启用Service,如何停用Service Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发现,可以使用它开发如监控之类的程序.服 ...

随机推荐

  1. Eureka的一些注意事项

    1.心跳设置:只能在application.yml中 2. 注册到Eureka上面的服务名称 与swagger2使用的时候,需要配置此项,否则显示服务名称为unknown 3.高可用的Eureka 4 ...

  2. python学习(25) BeautifulSoup介绍和实战

    BeautifulSoup是python的html解析库,处理html非常方便 BeautifulSoup 安装 pip install beautifulsoup4 BeautifulSoup 配合 ...

  3. IAR ------- 在线调试技巧

    调试模式下,右击某一行选“Set Next Statement”,可以不执行中间程序,执行点直接到此行,用于不执行某些代码.

  4. 【Asp.net入门02】搭建Asp.net开发环境

    本节主要讲解: 什么是asp.net asp.net开发和运行环境介绍 1.什么是ASP.NET Asp.net不是一种编程语言,而是一种开发技术.我们可以利用这种技术所提供的类库,使用C#或者VB编 ...

  5. Selenium geckodriver异常

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  6. 服务器IP安全策略限制网络访问

    https://jingyan.baidu.com/article/3c343ff714d4890d377963cd.html https://www.icbase.com/TestGetUrl.as ...

  7. DP整理(未完待续)

    一.资源问题 T1 机器分配 已知条件:每家公司分配x台机器的盈利 令f[i][j]表示前i公司分配j台机器的最优解 转移:f[i][j]=max(f[i-1][j-k]+w[i][k]) 初始化:f ...

  8. awk例子

     ls |awk -F . '{print $1}'|awk -F '-[0-9]' '{print $1}' 

  9. onchange/onpropertychange/oninput

    onpropertychange事件,顾名思义,就是property(属性)change(改变)的时候,触发事件.这是IE专有的!如果想兼容其它浏览器,有个类似的事件,oninput! 可能大家会想到 ...

  10. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第八课 调度监听器

    第八课 调度监听器 调度监听器和触发监听器和触发监听器.作业任务监听器非常相似,只是调度监听器在调度器内接收通知事件,而不需要关联具体的触发器或作业任务事件. 跟调度监听器相关的事件,添加作业任务/触 ...