Service中有四个重要函数:

    public IBinder onBind(Intent arg0);    //必须实现,返回接口给Servicepublic void onCreate();                //Service创建时调用public void onStart(Intent intent,int startId);//通过startService()会调用public void onDestroy();                //销毁时StopService()调用

通过StartActivity()函数启动Service,当第一次调用时会分别调用onCreate()和onStart在();

之后只会调用onStart();

通过函数StopService()结束Service,会调用onDestroy();

调用BindService():当Service未创建时调用onCreate()和onBind();当创建了只调用onBind();

使用函数bindService()和函数unbindService()可以绑定和解除绑定

对已经绑定的Service调用bindService()无效,即多次调用bindService()和调用一次bindService()一样。 unbindService()只能使用一次,即对于一个绑定的Service,只能调用一次unbindService(),多次调用会产生错误

该函数原型为:

bindService(Intent,ServiceConnection,BIND_AUTO_CREATE);

ServiceConnection是一个服务连接类,必须实现以下两个函数:

public void onServiceConnected(ComponentName arg0, IBinder arg1)//连接成功时调用
public void onServiceDisconnected(ComponentName arg0)        //连接失败时调用

示例如下:

private ServiceConnection conn=new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName arg0, IBinder arg1) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();Log.i("SERVICE","success");}@Overridepublic void onServiceDisconnected(ComponentName arg0) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "errer", Toast.LENGTH_LONG);Log.i("SERVICE","errer");}

Service实例:

MainActivity.java:

private ServiceConnection conn=new ServiceConnection() {@Overridepublic void onServiceConnected(ComponentName arg0, IBinder arg1) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "success", Toast.LENGTH_LONG).show();Log.i("SERVICE","success");}@Overridepublic void onServiceDisconnected(ComponentName arg0) {// TODO Auto-generated method stubToast.makeText(MainActivity.this, "errer", Toast.LENGTH_LONG);Log.i("SERVICE","errer");}
};
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button1=(Button)this.findViewById(R.id.btn1);Button button2=(Button)this.findViewById(R.id.btn3);Button button3=(Button)this.findViewById(R.id.btn4);Button button4=(Button)this.findViewById(R.id.btn5);button1.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubstartService(new Intent(MainActivity.this,NewService.class));}});button2.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubstopService(new Intent(MainActivity.this,NewService.class));}});button3.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubbindService(new Intent(MainActivity.this,NewService.class),conn,BIND_AUTO_CREATE);}});button4.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubunbindService(conn);}});
}

NewService.java:

public class NewService extends Service {@Overridepublic IBinder onBind(Intent arg0) {// TODO Auto-generated method stubToast.makeText(NewService.this, "onBind", Toast.LENGTH_LONG).show();Log.i("SERVICE","onbind");return null;}public void onCreate() {super.onCreate();Log.i("SERVICE","oncreat");Toast.makeText(NewService.this, "onCreat", Toast.LENGTH_LONG).show();}public void onStart(Intent intent,int startId) {Log.i("SERVICE","onstart");Toast.makeText(NewService.this, "onStart", Toast.LENGTH_LONG).show();}public void onDestroy() {Log.i("SERVICE","ondestory");Toast.makeText(NewService.this, "onDestory", Toast.LENGTH_LONG).show();}
}

Activity.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical" ><Button android:id="@+id/btn1" android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="start"/><Button android:id="@+id/btn3" android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="stop"/><Button android:id="@+id/btn4" android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="bind"/><Button android:id="@+id/btn5" android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="unbind"/>
</LinearLayout>

AndroidManifest.xml增加:

 <service android:name="com.example.new1.NewService"/>

转载于:https://blog.51cto.com/aslonely/1616665

Android Service详解(二)第一个Service相关推荐

  1. Android Linker详解(二)

    Android Linker详解(二) Android Linker详解(二) 本文目的 So的链接 So重定位 总结 本文目的 接上篇Linker源码详解(一),本文继续来分析Linker的链接过程 ...

  2. java stopself_Android Service详解(二)---StartService

    一丶概述 启动服务由另一个组件通过调用 startService() 启动,这会导致调用服务的 onStartCommand() 方法. 服务启动之后,其生命周期即独立于启动它的组件,并且可以在后台无 ...

  3. android动画详解二 属性动画原理

    property动画是一个强大的框架,它几乎能使你动画任何东西.你可以定义一个动画来改变对象的任何属性,不论其是否被绘制于屏幕之上.一个属性动画在一定时间内多次改变一个属性(对象的一个字段)的值.要动 ...

  4. android菜单详解二:选项菜单

    创建一个选项菜单 选项菜单里应该包含基本的activity动作和必须的导航条目 (例如,一个打开程序设置的菜单项). 选项菜单的菜单项有两种不同的选择方法,一是菜单项按钮,二是通过 Action Ba ...

  5. Android Fragment详解(二):Fragment创建及其生命周期

    Fragments的生命周期 每一个fragments 都有自己的一套生命周期回调方法和处理自己的用户输入事件. 对应生命周期可参考下图: 创建片元(Creating a Fragment) To c ...

  6. android Fragments详解

    android Fragments详解一:概述 android Fragments详解二:创建Fragment 转载于:https://my.oschina.net/liangzhenghui/blo ...

  7. android子视图无菜单,Android 菜单详解

    Android中菜单分为三种,选项菜单(OptionMenu),上下文菜单(ContextMenu),子菜单(SubMenu) 选项菜单 可以通过两种办法增加选项菜单,一是在menu.xml中添加,该 ...

  8. Android Service 详解一:概述

    一个Service是没有界面且能长时间运行于后台的应用组件.其它应用的组件可以启动一个服务运行于后台,即使用户切换到另一个应用也会继续运行.另外,一个组件可以绑定到一个service来进行交互,即使这 ...

  9. android service是什么,Android service是什么 Android service详解

    Android service是什么 Android service详解 时间:2017-04-06     来源:Android开发学习网 什么是Android Service? service是A ...

  10. 安卓 linux init.rc,[原创]Android init.rc文件解析过程详解(二)

    Android init.rc文件解析过程详解(二) 3.parse_new_section代码如下: void parse_new_section(struct parse_state *state ...

最新文章

  1. 【转载】有软件开发,就要有软件测试!
  2. python将文本转化成语音并播放
  3. Java的Object类
  4. ajax 上传读取excel
  5. 上午写了一段代码,下午就被开除了,奇怪的知识又增加了
  6. 原神创意工坊工具箱2.0源码-小程序前端源码
  7. 我用 Python 破解了同事的加密压缩包!
  8. day04.2-迭代器
  9. getUrlParam,jQuery中的URL参数获取
  10. JS基础_js编写位置
  11. mysql utf8转gbk cmd_修改xampp的mysql数据库utf8mb4为gbk以解决cmd内中文显示为问号
  12. FireFox下竟然对HTML注释与IE下有不同的解析
  13. 华为校招C++开发岗面试经验——软件开发工程师
  14. 构建Android Push Notification Service服务端及客户端
  15. xp系统从u盘启动计算机,电脑高手教你如何用u盘启动装xp系统!
  16. java实现小球的碰撞
  17. 编辑距离(Edit Distance) 一文读懂(Python实现)
  18. 计算机应用方面中文学术论文写作详细总结
  19. 广电时评 | 中央主流媒体盛赞爱奇艺短剧新气象
  20. 局域网arp攻击_如何排查ARP网络攻击

热门文章

  1. 计算机丢失cv210.dll,cv210.dll文件免费版
  2. python中怎么创建配置文件_在Python中创建游戏配置/选项(config.cfg)文件
  3. abap 给用户分配事物代码权限_【第五篇】SAP ABAP7.50 之用户接口
  4. python封装方法有几种_python之--------封装
  5. shader 编程入门(一)
  6. NRF52810能不能替代NRF52832
  7. 解题:HEOI 2016 求和
  8. [NOI2015]品酒大会
  9. 通过poi操作ppt中的图片
  10. Storm Trident API