Service是Android四大组件之一

1、Service与Activity的区别在:Service一直在后台运行,没有用户界面。

2、选择Activity与Service的标准:如果某个程序组件需要在运行时向用户呈现某种界面,或者改程序需要和用户进行交互,就需要用Activity,否则需要考虑使用Service.

3、Android系统本身提供了大量的Service组件,开发者可以通过Service来操作Android系统。

4、Service组件有自己的生命周期。

5、Service与Activity都是从Context派生而来的,都可以调用Context里面定义的如getResources()、getContentResolver()等方法。

下面我们来先创建一个Service并启动

(1)定义一个继承Service的子类。

package com.example.testservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder; public class FirstService extends Service{ @Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
} @Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
System.out.println("onCreate");
} @Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
System.out.println("onStartCommand");
return super.onStartCommand(intent, flags, startId); } @Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.out.println("onDestroy");
} }

注意:上面的onBind()方法是必须实现的方法。
(2)在AndroidMainfest.xml文件中配置该Service

<service android:name=".FirstService">
<intent-filter >
<action android:name="com.meritit.service.FIRST_SERVICE"/>
</intent-filter>
</service>

如果希望Service组件做某些事情,只要在onCreate()onStartCommand()方法中定义相关业务代码即可。

(3)运行Service

运行Service的方法有两种:

a: 通过Context的startService()方法:通过该方法启动Service,访问者与Service之间没有关联,即使访问者退出了,Service任然运行。

b:通过Context的bindService()方法:使用该方法启动Service,访问者与Service绑定在了一起,访问者一旦退出,Service也就终止了。

下面先通过第一种方式运行Service

package com.example.testservice;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button; public class MainActivity extends Activity {
private Button start;
private Button stop;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //获取程序界面中的start、stop两个按钮
start = (Button) findViewById(R.id.start);
stop = (Button) findViewById(R.id.stop); final Intent intent = new Intent();
intent.setAction("com.meritit.service.FIRST_SERVICE"); start.setOnClickListener(new OnClickListener() { @Override
public void onClick(View arg0) {
startService(intent);
}
}); stop.setOnClickListener(new OnClickListener() { @Override
public void onClick(View v) {
stopService(intent);
}
});
}
}

从上面代码中可以看出,启动、关闭Service非常容易,只需要调用Context里面定义的startService()方法和stopService()方法。

连续单击“启动Service"按钮,程序将会连续多次启动Service,LogCat如图:

从图中我们可以看出,onCreate方法只被调用了一次,这说明:每次Service被第一次启动调用onCreate()方法,多次启动已经启动的Service组件将不会再回调onCreate()方法啊,但每次启动时都会回调onStartCommand()方法,这样就可以根据不同的业务需求将业务代码放在onCreate()方法或onStartCommand()方法中。下图是Service的生命周期,因为比较简单所以就不叙述过程了。

下一篇将介绍:绑定本地Service并与之通信

最新文章

  1. Consistent hashing —— 一致性哈希
  2. Python常用函数、方法、模块记录
  3. node连接--MongoDB
  4. 呆呆的io流输入输出的一些基础
  5. 关于 ASP.NET MVC 4 如果管理用户
  6. SQL Server 中WITH (NOLOCK)
  7. Tomcat- java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet
  8. Android 视图切换库的使用 - SwitichLayout
  9. appium 并发测试
  10. Java时间比較
  11. PHP 序列化与反序列化函数
  12. iOS-OC、Swift 混编之桥接文件
  13. centos7.2 下 部署单节点redis 3.2.5
  14. oracle基本查询
  15. Android OkHttp Get请求方式
  16. vue2项目结构搭建
  17. 【Bootstrap系列】详解Bootstrap-table
  18. spring boot 注解方式 idea报could not autowire
  19. pair work 附加题解法(张艺 杨伊)
  20. 分类算法的R语言实现案例

热门文章

  1. amazeui学习笔记--css(常用组件3)--按钮组Button-group
  2. 主定理(Master Theorem)与时间复杂度
  3. 代码高亮显示——google-code-prettify
  4. promis:异步编程
  5. java.util.ConcurrentModificationException(如何避免ConcurrentModificationException)
  6. java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: student is not mapped
  7. 【习题 5-7 UVA - 12100】Printer Queue
  8. C标签的使用.md
  9. idea+springboot+freemarker热部署(转)
  10. sublim课程2 sublim编辑器的使用(敲代码的时候把这个放旁边用)