定义;
--后台运行、不可见、没有界面
--优先级高于Activity
用途:
--播放音乐、记录地理信息位置的改变、监听某种动作
注意:
--运行在主线程,不能用来做耗时的请求活动
--可以在服务中开一个线程,在线程中做耗时动作
类型:
1、本地服务(local Service)
------应用程序内部
启动方式:
-------StartService ----StopService()----stopService()-----stopSelf()------stopSelfResult()
-------BindService ----先要unbindService然后停掉(启动源销毁时一定要先解绑定)
2、远程服务(Remote Service)
------Android系统内部的应用程序之间
------定义IBinder接口
生命周期:
-------StartService:---->startService()--->onCreate()--->onStartCommmand()--->ServiceRunning(调用停止方法)--->onDestroy()--->Service down
-------BindService: ---->bindService()--->onCreate()--->onBind()--->Service绑定了(调用解绑定)--->onUnbind()--->onDestroy()--->Service down
注:开启Service没有关闭以前onCreate()只调用一次,第二次直接开启onStartCommmand()方法
Start方式特点:
---服务跟启动源没有任何联系
---无法得到服务对象
Bind方式特点:
---通过Ibinder接口实例,返回一个ServiceConnection对象给启动源
---通过ServiceConnection对象的相关方法可以得到Service对象

本地服务Start启动:直接用intent(context,class)——>startService(mintent)
补充:intent是四大组件关联的纽带
本地服务Bind启动:
intent2 = new Intent(MainActivity.this, MyBindService.class);
bindService(intent2, conn, Service.BIND_AUTO_CREATE);
----参1、intent对象
----参2、ServiceConnection
----参3、让服务创建用的 用参数:Service.BIND_AUTO_CREATE让服务正常创建
得到Service的回传数据:
1、binder接口:
---重写一个类继承Binder类
---写一个返回当前的服务对象的方法;
2、实现绑定:
----实现一个ServiceConnection类
----重写了两个方法用来:链接、杀死服务

补充:有一个IntentService类,

1、它里面包含了线程可以处理耗时操作

2、不能并发执行,一个执行完了才能执行宁一个;
!!!!!!!!!!!注意啊!!!!!!要在清单文件中注册(我经常忘记!!!!!!)

我们先来看清单文件信息:

 <service android:name="zxx.serivce.StartService"></service><service android:name="zxx.serivce.BindService"></service>
再看activity的实现:
package zxx.serivce;import android.app.Activity;
import android.app.Service;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import zxx.serivce.BindService.MyBinderService;public class MainActivity extends Activity {BindService service;ServiceConnection conn;Intent mintent2;Intent mintent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);conn = new ServiceConnection() {/*** service和启动源接源出意外调用解除绑定不会*/@Overridepublic void onServiceDisconnected(ComponentName name) {Log.i("******","绑定意外崩溃了");}/*** service和启动源接源连接时调用。*/@Overridepublic void onServiceConnected(ComponentName name, IBinder ibinder) {service = ((MyBinderService) ibinder).getBindService();// 要把IBinder对象装换成我们自定义的类}};}public void doClick(View v) {switch (v.getId()) {case R.id.startService:mintent = new Intent(this, StartService.class);this.startService(mintent);// Toast.makeText(this, "点击了", 0).show();break;case R.id.BindService:mintent2 = new Intent(this, BindService.class);bindService(mintent2, conn, Service.BIND_AUTO_CREATE);break;case R.id.paly:service.paly();break;case R.id.unbinder:unbindService(conn);break;case R.id.stop:stopService(mintent);break;default:break;}}@Overrideprotected void onDestroy() {stopService(mintent2);unbindService(conn);// 和启动源解绑super.onDestroy();}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}
}
Service中的实现:
package zxx.serivce;import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;public class BindService extends Service {public class MyBinderService extends Binder {public BindService getBindService() {return BindService.this;}}@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i("****", ""+"BindService____onCreate()");}@Overridepublic IBinder onBind(Intent intent) {return new MyBinderService();}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("****", ""+"BindService____onDestroy()");}public void paly(){Log.i("", "音乐播放了");}}
StartService启动模式的实现:
package zxx.serivce;import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;public class StartService extends Service{@Overridepublic void onCreate() {// TODO Auto-generated method stubsuper.onCreate();Log.i("****", ""+"onCreate()");}@Overridepublic void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();Log.i("****", ""+"onDestroy()");}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {Log.i("****", ""+"onStartCommand");return super.onStartCommand(intent, flags, startId);}@Overridepublic void onStart(Intent intent, int startId) {// TODO Auto-generated method stubsuper.onStart(intent, startId);Log.i("****", ""+"onStart");}@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}}

布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/LinearLayout1"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="zxx.serivce.MainActivity" ><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Service启动方式:" /><Buttonandroid:id="@+id/startService"android:layout_width="288dp"android:layout_height="wrap_content"android:onClick="doClick"android:text="startService" /><Buttonandroid:id="@+id/BindService"android:layout_width="290dp"android:layout_height="wrap_content"android:onClick="doClick"android:text="BindService" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="曹卓" /><Buttonandroid:id="@+id/paly"android:layout_width="288dp"android:layout_height="wrap_content"android:onClick="doClick"android:text="paly" /><Buttonandroid:id="@+id/unbinder"android:layout_width="287dp"android:layout_height="wrap_content"android:onClick="doClick"android:text="unbinder" /><Buttonandroid:id="@+id/stop"android:layout_width="290dp"android:layout_height="wrap_content"android:onClick="doClick"android:text="stop" /></LinearLayout>

本地服务(local Service)的实现相关推荐

  1. Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过<service>来声明.可以通过contect.startservice ...

  2. android技术服务,Android Service学习之本地服务

    Service是在一段不定的时间运行在后台,不和用户交互应用组件.每个Service必须在manifest中 通过来声明.可以通过contect.startservice和contect.bindse ...

  3. Android 服务类Service 的详细学习

    http://blog.csdn.net/vipzjyno1/article/details/26004831 Android服务类Service学习四大组建 目录(?)[+] 什么是服务 服务有什么 ...

  4. Windows 服务介绍(本地系统、网络服务、本地服务以及相关的power shell命令

    一.Windows服务概述 服务与进程 Windows服务是指系统自动完成的,不需要和用户交互的过程,可长时间运行的可执行应用程序.这些服务可以在计算机启动时自动启动,可以暂停和重新启动而且不显示任何 ...

  5. Local System/Network Service/Local Service权限介绍

    报错:错误代码 0x800700b7 配置错误定义了重复的"system.web.extensions/scripting/scriptResourceHandler"节 这个问题 ...

  6. Android服务之Service(其一)

    转载地址:http://www.cnblogs.com/zhangdongzi/archive/2012/01/08/2316711.html android中服务是运行在后台的东西,级别与activ ...

  7. 如何给Android应用创建本地服务

    Android系统给应用提供了两种类型的服务:启动型本地服务和绑定型本地服务,这两种服务的详细信息请参考"Android Service开发指南" Android Service开 ...

  8. Service(服务)之 Local Service(本地服务)

    一.Service简介 Android中服务是运行在后台的东西,级别与activity相同(同属四大组件).既然说service是运行在后台的服务,那么它就是不可见的,没有界面的东西.你可以启动一个服 ...

  9. Pro Android学习笔记(七七):服务(2):Local Service

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ Local Service的目的是更容易实 ...

最新文章

  1. UEFI引导的系统下装双系统解决方案
  2. Linux基本命令之文件查找、检索
  3. day4-生成器并行运算
  4. cdh 简介_CDH 1、CDH简介
  5. 以太坊2.0存款合约地址余额28.87万ETH,进度达55%
  6. 非资深玩家留言频率限制(1024秒限制)
  7. 安装docker环境
  8. ruby DBI安装使用指南
  9. wps页眉偶数页不同怎么设置_WPS文字应技巧—如何使奇数和偶数页的页眉页脚不同...
  10. 泥瓦匠:程序猿为啥要坚持写原创技术博客?
  11. VR家装:智慧家装“黑科技”
  12. 12306 订票助手(火车票订票插件)
  13. Android 利用Intent启动另一个app应用时,一个崩溃的问题
  14. jqury ajax 直接获取数据库信息,使用jQuery Ajax从数据库加载信息
  15. 使用python有趣地解决一道动态币值规划方案
  16. WaaSMedicAgent是什么程序?又叫Windows更新医生服务
  17. JDBC对数据库进行增删改查【面向对象版】
  18. 基于语义分割实现人脸图像的皱纹检测定位与分割
  19. Carthage入门篇-安装和使用
  20. 中高级前端工程师都需要熟悉的技能--前端缓存

热门文章

  1. win10自带sftp服务器_高手亲自解决win10系统下怎么使用OpenSSH设置SFTP服务器的完全操作办法...
  2. 微信开放平台开发——网页微信扫码登录(OAuth2.0)
  3. 小白学SLAM的流水账(一):跑通ORB踩过的坑
  4. 联通服务器光信号亮红灯移动,联通los红灯闪啥意思(图文)
  5. 【云原生之K8s】 Pod基础概念
  6. 卡西欧计算机蓝屏的处理方法,电脑出现蓝屏怎么办 电脑出现蓝屏解决方法【图文详解】...
  7. Java学习总结篇一初识jvav
  8. ChunJun Meetup演讲分享 | 基于袋鼠云开源框架的数仓一体化建设探索
  9. 设计模式系统回顾(4)模板模式
  10. VPS新手向折腾笔记