Service(一):认识service、绑定Service

时间:2022-03-31 04:16:57

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的理解与使用&lpar;二&rpar;——跨应用绑定Service并通信

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

  2. Android中AIDL的理解与使用&lpar;一&rpar;——跨应用启动&sol;绑定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&quot ...

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

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

  8. Android Service 服务(一)—— Service &period;

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

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

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

随机推荐

  1. 【bzoj3143】 Hnoi2013—游走

    http://www.lydsy.com/JudgeOnline/problem.php?id=3143 (题目链接) 题意 一个无向连通图,顶点从1编号到N,边从1编号到M.每一步以相等的概率随机选 ...

  2. MATLAB中fft函数的正确使用方法

    问题来源:在阅读莱昂斯的<数字信号处理>第三章离散傅里叶变换时,试图验证实数偶对称信号的傅里叶变换实部为偶对称的且虚部为零.验证失败.验证信号为矩形信号,结果显示虚部是不为零且最大幅值等于 ...

  3. fedora22有时不能启动

    [3.327871][drm:intel_set_pch_fifo_underrun_reporting [i915]] *ERROR* uncleared pch fifo underrun on ...

  4. 34 网络相关函数&lpar;二&rpar;——live555源码阅读&lpar;四&rpar;网络

    34 网络相关函数(二)——live555源码阅读(四)网络 34 网络相关函数(二)——live555源码阅读(四)网络 2)socketErr 套接口错误 3)groupsockPriv函数 4) ...

  5. Winform开发框架之权限管理系统改进的经验总结(1)-TreeListLookupEdit控件的使用

    最近一直在做一些技术性的研究和框架改进工作,博客也落下好几天没有更新了,也该是时候静下心来,总结这段时间的一些技术改进的经验了.和上一阶段的CRM系统开发和技术研究一样,我都喜欢在一个项目或者模块完成 ...

  6. codeforces &num;313 div1 B

    模拟判定就可以了 判定字符串是否相等用hash来判断 QAQ 值得一提的是一开始我交的时候T了 结果我将递归的顺序调整了一下就A了 (并不知道为什么 #include<cstdio> #i ...

  7. NSString、NSData、char&ast; 类型之间的转换-备

    1. NSString转化为UNICODE String: (NSString*)fname = @“Test”; char fnameStr[10]; memcpy(fnameStr, [fname ...

  8. ABP模块系统

    ABP模块系统 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP ...

  9. 微信应用号开发知识贮备之altjs官方实例初探

    天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生.从获得微信应用号邀请的业内人士发出来的一张开发工具源码截图可以看到,reacjs及其相应的FLUX框架altjs很有可能会成 ...

  10. 设计模式-策略模式Strategy以及消灭if else

    概述 如果在开发过程中,出现大量的if else或者switch case 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...