Service的基本组成
Service与Activity的最大区别就是一有界面,一个没有界面。
如果某些程序操作很消耗时间,那么可以将这些程序定义在Service之中,这样就可以完成程序的后台运行,
其实Service就是一个没有界面的Activity,执行跨进程访问也可以使用Service完成。
Service是一个没有UI界面的操作组件,主要功能是为Activity程序提供一些必要的支持,例如:手机
中的Mp3播放软件,当回到桌面的时候这些组件依然在运行,这就属于Service的功能,Service也有
自己的生命周期方法。
Service的生命周期控制方法:
方法及常量 |
类型 |
描述 |
|
1 |
START_CONTINUATION_MASK |
常量 |
解析执行Service |
2 |
START_STICKY |
常量 |
用于显示启动和停止Service |
3 |
IBinder onBind(Intent intent) |
普通 |
设置Activity和Service之间的绑定 |
4 |
onCreate() |
普通 |
当一个Service创建时调用 |
5 |
onStartCommand(Intent intent,int flags,int startId) |
普通 |
启动Service,由startService()方法触发 |
6 |
onDestroy() |
普通 |
Service销毁时调用,由stopService()方法触发 |
Service基本组成
1、单击“启动Serivce”按钮得下图:
2、再单击“启动Serivce”按钮得下图:
3、单击“停止Serivce”按钮得下图:
如果不退出Service,按Home键回到桌面,再找到任务管理器,可以发现Service还在运行,
所以说Service是运行在后台的。
在main.xml中:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#000000"
android:gravity="center_horizontal">
<Button
android:id="@+id/start"
android:layout_margin="30dp"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="#3399ff"
android:textColor="#ffffff"
android:text="启动Service" />
<Button
android:id="@+id/stop"
android:layout_margin="30dp"
android:layout_width="100dp"
android:layout_height="40dp"
android:background="#3399ff"
android:textColor="#ffffff"
android:text="停止Service" />
</LinearLayout>
在MyServiceDemo.java中:
package com.li.service;
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 MyServiceDemo extends Activity {
private Button start ;
private Button stop ;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setContentView(R.layout.main);
this.start = (Button) super.findViewById(R.id.start) ;
this.stop = (Button) super.findViewById(R.id.stop) ;
this.start.setOnClickListener(new StartOnClickListenerImpl()) ;
this.stop.setOnClickListener(new StopOnClickListenerImpl()) ;
}
private class StartOnClickListenerImpl implements OnClickListener{
public void onClick(View v) {
MyServiceDemo.this.startService(new Intent(MyServiceDemo.this,MyServiceUtil.class)) ;
}
}
private class StopOnClickListenerImpl implements OnClickListener{
public void onClick(View v) {
MyServiceDemo.this.stopService(new Intent(MyServiceDemo.this,MyServiceUtil.class)) ;
}
}
}
在MyServiceUtil.java中:
package com.li.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
public class MyServiceUtil extends Service {
@Override
public IBinder onBind(Intent intent) {
return null; // 此处暂时不做任何的处理
}
@Override
public void onCreate() {
System.out.println("*** Service onCreate()") ;
}
@Override
public void onDestroy() {
System.out.println("*** Service onDestroy()") ;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("*** Service onStartCommand") ;
return Service.START_CONTINUATION_MASK; // 继续执行
}
}
修改AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.li.service"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="15" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MyServiceDemo"
android:label="@string/title_activity_my_service_demo" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".MyServiceUtil" />
</application>
</manifest>
Service的基本组成相关推荐
- struts2 与 sping 整合 控制器中 service注入的问题
以个人见解认为struts1 与spring整合的时候按照习惯,我们会把 action 控制器直接配置到sping中去: eg : 这里以使用元注解方式实现Service注入进行讲解: 控制器关键代码 ...
- java action dao_java中Action层、Service层和Dao层的功能区分
一.Action/Service/DAO简介: Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DA ...
- Android中Service生命周期、启动、绑定、混合使用
一.Activity和Service如何绑定: 1.Service和Activity之间的连接可以用ServiceConnection来实现.实现一个ServiceConnection对象实例,重写o ...
- CentOS7下启动Nginx出现Failed to start nginx.service:unit not found
错误的原因就是没有添加nginx服务,所以启动失败. 解决方法: 1. 在/root/etc/init.d/目录下新建文件,文件名为nginx 或者用命令在根目录下执行:# vim /etc/i ...
- CentOS7 service network start命令启动时报错解决方法
service network start命令启动时报错: [root@localhost network-scripts]# service network start Starting netwo ...
- android Service 的使用
1 Service 简介 Service 是Android 四大组件之一 一般在后台运行,无用户界面,用户无法看到. Service主要用于组件之间交互(例如:与Activity.ContentPro ...
- Web Service 安全性解决方案(SOAP篇)
拼吾爱程序人生 » 软件编程 » Visual Studio.NET » Web Service » Web Service 安全性解决方案(SOAP篇) Web Service 安全性解决方案(SO ...
- Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**
之前一直都是使用hibernate4.2.21的我,有一天突然没有使用本地的jar包而是让IDEA自动下载最新版本的hibernate5.2.2之后,发现有几个经常使用的方法报错了. //创建配置对象 ...
- [转]JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
首先这是现在最基本的分层方式,结合了SSH架构.modle层就是对应的数据库表的实体类.Dao层是使用了Hibernate连接数据库.操作数据库(增删改查).Service层:引用对应的Dao数据库操 ...
- k8s nodeport无法访问_k8s学习之service详解
1.概述 通过Deployment来创建一组Pod来提供具有高可用性的服务.每个Pod都会分配一个单独的Pod IP,却存在如下两问题: 1.pod ip仅仅集群内部可见的虚拟IP,外部无法访问 2. ...
最新文章
- mysql unix 安装教程_在UNIX系统下安装MySQL_MySQL
- oracle数据库if else,[数据库]oracle中if/else的3种写法
- Two Arrays And Swaps CodeForces - 1353B(贪心+分类)
- Qt工作笔记-简单的画图工具
- render注册一个链接组件_详解vue 动态加载并注册组件且通过 render动态创建该组件...
- linux python开发identifier,python程序设计 浙大版
- jsp中头的导入两种方式区别
- ubuntu20.04下开发海康威视网络摄像头sdk(二)云台基本控制(位姿控制)
- Tuxera NTFS for Mac(mac读写NTFS磁盘工具)
- 用TA学吉他,下个双11再也不孤单-吉他音阶实战 (三)
- php 有道翻译api,php有道翻译api调用方法实例
- js设计模式的讲解与应用 - 【单例模式】
- qemu: usb存储设备仿真
- Remote使用出现的问题及解决办法
- “降维打击”到底什么意思?
- mysql explain 类似_Oracle有没有类似MySQL中的explain功能
- 分享一个通过网络链接PDF转JPG的公用方法
- cmd 命令行 执行php文件
- 一些文学常识。。。。。。
- 3dsmax2014插件开发之环境搭建
热门文章
- Sep 26 09:22:41 ck01 kernel: Buffer I/O error on device sda2, logical block 2
- jQuery--AJAX传递xml
- Swift 中使用 SQLite——批量更新(事务处理)
- swift中delegate与block的反向传值
- java正则表达式获取指定两个字符串之间内容
- linux小脚本批量添加/删除用户
- 【JDBC 报错】Connections could not be acquired from the underlying database!
- char *a 和char a[] 的区别(指针和数组的区别)
- CCAH-CCA-500-4题:Where are Hadoop task log files stored?
- qq图片选择效果的处理