阅读更多
Service 介绍


1.Service 是android 中四大组件与Activity最相似的地方,都代表的是可执行的程序;

2.Service 特点:
   a)在后台运行,一般处理比较耗时的任务;
   b)没有实际的界面;
   c)可以和其他组件进行交互;
   d)例如:处理音乐、下载文件等;

3.Service 的声明周期:
   a)三个阶段:创建 – 开始 --- 销毁
   b)OnCreate(); Service 声明周期的开始,完成Service的初始化工作;
   c)OnStartCommand(); 服务声明周期开始,没有对应的停止函数
   d)OnDestory(); 声明周期的结束,释放Service所占用的资源;
4.提示:一个服务只会创建一次,销毁一次,但是可以启动多次;

5.Service的启动方式:
  a)Conetext.startService();
  b)Contenxt.bindService();

6.图解生命周期:

7.启动服务:
   a)如果Service和调用服务的组件在同一个应用程序中,可以使用显式启动或隐式启动,显式更加容易使用,代码简洁;
   b)若服务和调用的服务的组件在不同的应用程序中,则只能使用隐式启动;

8.停止服务:
   a)StopService(intent);  调用onDestory() 一次;

9.绑定本地服务以及与服务之间的通讯:
   a)bindService(),方法实现绑定,unbindService() 解除绑定
   b)bindService(Intent service,ServiceConnection conn,int flags); 参数说明
      i.service通过Intent指定要启动的Service;
     ii.conn 该对象用于监听访问者与Service之间的链接情况,当访问者与Service之间成功链接时将回调onServiceconnected();断开链接时调用onServiceDisconnected() 方法
    iii.flags:指定绑定时是否自动创建Service, 0 表示不自动创建,BIND_AUTO_CREATEZ自动创建;
   c)提示:ServiceConnection 对象的onServiceconnected() 中有一个IBinder对象,使用该对象来实现与Service之间的通讯;


下面是案例代码:

mainfest 配置文件如下:

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



主程序入口:
package com.sun.service;import android.app.Activity;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.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {// 声明组件对象private Button start, stop, bind, unbind, result; // 提示:成员变量都是有默认值的private ServiceTwo serviceTwo; //对象声明//绑定服务 链接private ServiceConnection serviceConnection = new ServiceConnection() {// 绑定服务public void onServiceConnected(ComponentName name, IBinder service) {// 用于获取服务返回的数据信息 -- 此处获取ServiceTwo的对象serviceTwo = ((ServiceTwo.MyBinder)service).getService();Log.i("msg","获取到了serviceTwo对象");}// 解绑服务public void onServiceDisconnected(ComponentName name) {}};/** * 初始化信息 */public void init() {start = (Button) findViewById(R.id.start);stop = (Button) findViewById(R.id.stop);bind = (Button) findViewById(R.id.bind);unbind = (Button) findViewById(R.id.unbind);result = (Button) findViewById(R.id.result);}// 程序入口protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);this.init(); // 初始化数据// 设置事件坚听start.setOnClickListener(listener);stop.setOnClickListener(listener);bind.setOnClickListener(listener);unbind.setOnClickListener(listener);result.setOnClickListener(listener);}// 按钮事件动作private OnClickListener listener = new OnClickListener() {public void onClick(View v) {int id = v.getId();if (id == R.id.start) {// 启动服务startAction();return;}if (id == R.id.stop) { // 停止服务StopAction();return;}if (id == R.id.bind) { // 绑定服务bindAction();return;}if (id == R.id.unbind) { // 解绑服务unbindAction();return;}if (id == R.id.result) { // 获取数据return;}}};/** * StartService 开始服务 */public void startAction(){Intent intent = new Intent(MainActivity.this,ServiceOne.class);startService(intent); // 停止服务}/** * StopService 停止服务  */public void StopAction(){Intent intent = new Intent(MainActivity.this,ServiceOne.class);stopService(intent);}/** * bindService 绑定服务 */public void bindAction(){Intent intent = new Intent();intent.setAction("sun.bind.service");bindService(intent, serviceConnection,BIND_AUTO_CREATE);}/** * unbindService 解绑服务  */public void unbindAction(){unbindService(serviceConnection); //解绑服务}/** * 从服务中获取数据 */public void getResultAction(){}}


[b]服务: 方式一[/b]
package com.sun.service;import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.util.Log;import android.widget.Toast;/** * 启动服务方式一 测试 *  * @author Administrator *  */public class ServiceOne extends Service {/** * 创建服务 */public void onCreate() {super.onCreate();Log.i("msg", "onCreate()...");Toast.makeText(ServiceOne.this, "onCreate()...", Toast.LENGTH_LONG).show();}/** * 启动服务 */public int onStartCommand(Intent intent, int flags, int startId) {Log.i("msg", "onStartCommand()...");Toast.makeText(ServiceOne.this, "onStartCommand()...", Toast.LENGTH_LONG).show();return super.onStartCommand(intent, flags, startId);}/** * 销毁服务 * 此处做资源 */public void onDestroy() {Log.i("msg", "onDestroy()...");Toast.makeText(ServiceOne.this, "onDestroy()...", Toast.LENGTH_LONG).show();super.onDestroy();}/** * 启动服务 */public void onStart(Intent intent, int startId) {super.onStart(intent, startId);Log.i("msg", "onStart()...");Toast.makeText(ServiceOne.this, "onStart()...", Toast.LENGTH_LONG).show();}/** * 给客户端返回一个借口实例 */public IBinder onBind(Intent intent) {return null;}}

服务方式二:绑定服务
package com.sun.service;import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import android.util.Log;/** * 服务测试 -- 绑定服务测试 * 注意:此声明周期,所有的方法只能调用一次 * @author Administrator *  */public class ServiceTwo extends Service {//自定义Binderpublic class MyBinder extends Binder{public ServiceTwo getService(){Log.i("msg","getService()...");return ServiceTwo.this; // 返回服务}}private MyBinder myBinder = new MyBinder(); //获取对象/** * 创建服务,首次启动时执行 */public void onCreate() {super.onCreate();Log.i("msg","onBind()中的oncreate()...");}/** * 绑定服务,同时给客户端返回一个借口实例 * 只可绑定一次,不可多次绑定 */public IBinder onBind(Intent intent) {Log.i("msg","onBind()...");return myBinder; // 返回一个对象,继承了Binder的对象}/** * 解绑服务 */public boolean onUnbind(Intent intent) {Log.i("msg","onUnbind()...");return super.onUnbind(intent);}/** * 销毁服务 */public void onDestroy() {Log.i("msg","onBind()中的onDestroy()...");super.onDestroy();}}
  • service.rar (1.3 MB)
  • 下载次数: 6

更多相关文章

  1. 在Android(安卓)中使用KSOAP2调用WebService
  2. Android资源管理框架-------之Android中的资源包(二)
  3. Android(安卓)服务两种启动方式的区别
  4. Native层HIDL服务的获取原理-Android10.0 HwBinder通信原理(七)
  5. Android中Fragment的使用
  6. android ndk 开发之 在 框架层使用 jni
  7. android开发系列之消息机制
  8. Android(安卓)访问Android(安卓)Wear数据层Api——同步Data Item
  9. Android开发系列之调用WebService

随机推荐

  1. 用 jdb 追踪 Android
  2. IFL嵌入式小组技术博客入口导航
  3. Cannot add extension with name 'androi
  4. Android简明开发教程十六:Button 画刷示例
  5. android学习笔记20--------------Relativ
  6. android中wifi原理及流程分析(很经典)
  7. android 输入法弹出 标题栏不被顶出去
  8. Android系统中自带了很多图标,我们的程序
  9. Android内部存储和外部存储的几个概念(内
  10. ListView点击效果设置