一、使用Service

1.右击java文件夹,选择新建Service,然后重写其中的onStartCommand函数,只要执行了startService函数,onStartCommand便会被执行

package com.example.shiyanshi.learnservice;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder; public class MyService extends Service {
public MyService() {
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
//throw new UnsupportedOperationException("Not yet implemented");

return new Binder(); //要被重写,否则会弹出上面的错误

    }

    //执行startService时被调用
@Override
public int

onStartCommand

(Intent intent, int flags, int startId) {
System.out.println("Service onStartCommand"); new Thread(new Runnable(){
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("******************Service is running********************");
}
} }).start();
return super.onStartCommand(intent, flags, startId);
}
//    @Override
// public void onCreate() {
// super.onCreate();
// System.out.println("**************Service onCreate*****************");
// }
//
// @Override
// public void onDestroy() {
// super.onDestroy();
// System.out.println("****************Service onDestroy***************");
// }
}

2.启动service时调用startService函数,关闭service时调用stopService函数,该函数需要一个Intent,无论是像下述方式创建intent还是通过

startService(new Intent(MainActivity.this,MyService.class));stopService(new Intent(MainActivity.this,MyService.class));打开或者关闭的服务均是同一个

public class MainActivity extends Activity implements View.OnClickListener, ServiceConnection {
private Intent intent;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

intent=new Intent(MainActivity.this,MyService.class);

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

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

 

二、绑定Service

1.绑定Service时调用bindService函数,public abstract boolean bindService (Intent service, ServiceConnection conn, int flags)  其第二个参数表示服务的连接,服务的连接主要用来侦听服务的状态,可以传递this指针(当传递this时该服务便与当前Activity绑定在一起了,当退出当前Activity时,服务便会自动被系统关闭(调用onDestroy函数,并且会弹出一个错误信息)),第三个参数可以为BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_NOT_FOREGROUND, BIND_ABOVE_CLIENT, BIND_ALLOW_OOM_MANAGEMENT, or BIND_WAIVE_PRIORITY.注意当第二个参数传递this时,还要在当前Activity类中实现onServiceConnected和onServiceDisconnected,否则会出现类型不匹配的错误,其中onServiceConnected函数在绑定服务成功后执行,onServiceDisconnected服务所在的进程崩溃或被杀掉的时候被执行。

public class MainActivity extends Activity implements View.OnClickListener, ServiceConnection {
private Intent intent; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); intent=new Intent(MainActivity.this,MyService.class);

findViewById(R.id.btnStartService).setOnClickListener(this);
findViewById(R.id.btnStopService).setOnClickListener(this);
findViewById(R.id.btnBindService).setOnClickListener(this);
findViewById(R.id.btnUnbindService).setOnClickListener(this);

    }

    @Override
public void

onClick

(View view) {       

switch (view.getId())
{

            case R.id.btnStartService:
startService(intent);
break;
case R.id.btnStopService:
stopService(intent);
break;
case R.id.btnBindService:

bindService(intent, this, Context.BIND_AUTO_CREATE);

                break;
case R.id.btnUnbindService:

unbindService(this);

                break;
default:
break;

}

    }

    //服务被绑定成功成功后执行
@Override
public void

onServiceConnected

(ComponentName componentName, IBinder iBinder) {
System.out.println("***************Service Connect Successful********************");
} //服务所在的进程崩溃或被杀掉的时候被执行
@Override
public void

onServiceDisconnected

(ComponentName componentName) {
System.out.println("***************Service disconnect Successful********************");
}
}
 
public class MyService extends Service {
public MyService() {
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");

return new Binder();

    }

    //执行startService时被调用
@Override
public int

onStartCommand

(Intent intent, int flags, int startId) {
System.out.println("Service onStartCommand");
return super.onStartCommand(intent, flags, startId);
} @Override
public void

onCreate

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

onDestroy

() {
super.onDestroy();
System.out.println("****************Service onDestroy***************");
}
}

2.Service程序

public class MyService extends Service {
public MyService() {
} @Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
// throw new UnsupportedOperationException("Not yet implemented");

return new Binder();

    }

    //执行startService时被调用
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("Service onStartCommand");
return super.onStartCommand(intent, flags, startId);
} @Override
public void onCreate() {
super.onCreate();
System.out.println("**************Service onCreate*****************");
} @Override
public void onDestroy() {
super.onDestroy();
System.out.println("****************Service onDestroy***************");
}
}

三、Service生命周期

1.onCreate启动服务或者绑定服务时执行,注意若启动了服务的同时,又绑定了服务,该函数只会执行一次(最先启动或绑定的那次被执行)

2.onDestroy解除绑定或者停止服务时被执行,注意若启动了服务的同时,又绑定了服务,该函数只会在服务被停止并且绑定解除后执行(最后停止服务或解除绑定的那次被执行)

3.onStartCommand可以多次执行,只要执行了startService函数,该函数就会被执行;注意onCreate函数只有第一次执行startService函数(或bindService函数)时才会被执行,即只能执行一次。

4.onServiceConnected只在服务绑定成功后执行,注意只能执行一次。

5.onServiceDisconnected服务所在的进程崩溃或被杀掉的时候被执行。

(五)认识Android中的Service的更多相关文章

  1. Android 中的 Service 全面总结(转载)

    转载地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 感谢作者 Android 中的 Service 全面总结 1.Ser ...

  2. (转载)Android中的Service:Binder,Messenger,AIDL(2)

    前言 前面一篇博文介绍了关于Service的一些基本知识,包括service是什么,怎么创建一个service,创建了一个service之后如何启动它等等.在这一篇博文里有一些需要前一篇铺垫的东西,建 ...

  3. (转载)所有分类 > 开发语言与工具 > 移动开发 > Android开发 Android中的Service:默默的奉献者 (1)

    前言 这段时间在看一些IPC相关的东西,这里面就不可避免的要涉及到service,进程线程这些知识点,而且在研究的过程中我惊觉自己对这些东西的记忆已经开始有些模糊了——这可要不得.于是我就干脆花了点心 ...

  4. 【转】Android中保持Service的存活

    这几天一直在准备考试,总算有个半天时间可以休息下,写写博客. 如何让Service keep alive是一个很常见的问题. 在APP开发过程中,需要Service持续提供服务的应用场景太多了,比如闹 ...

  5. Android中的service

    1.service简介:service可以在和多场合的应用中使用,比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息 ...

  6. Android中的Service小结

    简介 Service适合执行不需要和用户交互,而且长期运行的任务.即使程序被切换回后台,服务仍然可以正常运行.Service并不自动开启线程,默认运行在主线程中. Service中需要重载的函数 on ...

  7. Android 中的 Service 全面总结

    1.Service的种类   按运行地点分类: 类别 区别  优点 缺点   应用 本地服务(Local) 该服务依附在主进程上,  服务依附在主进程上而不是独立的进程,这样在一定程度上节约了资源,另 ...

  8. Android 中的 Service 全面总结 (转)

    原文地址:http://www.cnblogs.com/newcj/archive/2011/05/30/2061370.html 1.Service的种类   按运行地点分类: 类别 区别  优点 ...

  9. Android中的Service与进程间通信(IPC)详解

    Service 什么是Service 在后台长期运行的没有界面的组件.其他组件可以启动Service让他在后台运行,或者绑定Service与它进行交互,甚至实现进程间通信(IPC).例如,可以让服务在 ...

  10. Android中的Service组件具体解释

    Service与Activity的差别在于:Service一直在后台执行,他没实用户界面,绝不会到前台来. 一,创建和配置Service 开发Service须要两个步骤:1.继承Service子类,2 ...

随机推荐

  1. UVa 836 - Largest Submatrix

    题目:给你一个n*n的01矩阵,求里面最大的1组成的矩形的米娜及. 分析:dp.单调队列.UVa 1330同题,仅仅是输入格式变了. 我们将问题分解成最大矩形.即求解以k行为底边的图形中的最大矩形.然 ...

  2. 由闭包引起的对javascript代码可维护性的思考

    在最近的编程实践中由闭包的使用引起了我对javascript代码可维护性的思考.面向对象的其中一个特性封装性通过封装可以降低类与类之间或模块与模块之间耦合性从而使我们的设计更加高内聚低耦合,在大规模的 ...

  3. LDAP启动cacao提示Invalid file permission

    问题处理步骤: 1.LDAP实例停止 2.DSCC控制台启动,提示cacao已停止…… 3.启动caocaoroot@rusky bin]# ./cacaoadm startInvalid file ...

  4. oracle数据库10g下载地址

    Oracle Database 10g Release 2 (10.2.0.1.0) Enterprise/Standard Edition for Microsoft Windows (32-bit ...

  5. 结构体 + typedef

    简单结构体 struct student{ char name[20];   //可以用scanf或者直接赋值 *如果用char *name  在用scanf时没有内存接收 long id; int ...

  6. [jquery] 图片热区随图片大小自由缩放

    在图片上直接画出带超级链接热区元素map和area相信大家并不陌生,Dreamweaver等网页制作软件都有直接在图片上绘制带超级链接的热区工具,但是直接绘制的热区是不能随着图片自适应放大和缩小的,现 ...

  7. ( function(){…} )()

    javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法也是对javascript语言特性更进一步的深入理解. ( f ...

  8. 去除除服串中的某些字符,不用String内置方法

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static vo ...

  9. Fragment 之 PagerAdapter

    package com.edaixi.main.adapter; import android.content.Context; import android.support.v4.view.Page ...

  10. 前端-mate讲解

    <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. <meta> 标签位于文档的头部,不包含任何内容. & ...