安卓服务(Service)的两种开启方式以及服务的生命周期
安卓中服务的开启方式
一:採用start的方式开启服务
调用函数:startService(Intent)->onCreate()->onStart()/onStartCommand()->onDestroy()
特点:服务被开启后不会反复开启,仅仅会调用onStart(),服务仅仅会被停止一次。
二:採用bind的方式开发服务
调用函数:bindService(Intent…)->onCreate()->onBind()->onUnBind()->onDestroy();
特点:绑定不会调用onStart()[过时了]和onStartCommand()方法。
两种服务的差别:
start方式开发服务,一旦服务开启跟调用者就没有不论什么关系了。比方我们的服务是在Activity中调用开启的,当Activity关闭的时候,服务不会关闭。
bind方式开启服务,调用者没了。服务也会关闭,能够理解为同生共死。
对于start开启服务的方式比較简单。重点解说bind的方式。
样例:
1.布局里面设置三个button
2.为button设置监听事件。有好几种方式。
3.处理事件。
当点击绑定的时候:
/*绑定的创建方式
*/
Intent intent = new Intent(this, MyService.class);
bindService(intent, conn, BIND_AUTO_CREATE);
conn是自己实现的功能类,继承自ServiceConnection。
完整代码例如以下:
public class MainActivity extends ActionBarActivity {
private MyConn conn;
private Call c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//Call相似中间人的功能。
}
public void bind(View v){
conn = new MyConn();
Intent intent = new Intent(this, MyService.class);
bindService(intent, conn, BIND_AUTO_CREATE);
}
public void unbind(View v){
unbindService(conn);
c = null;
}
/*
* 调用服务里的方法
*/
public void call(View v){
c.callMethodInService();
}
private class MyConn implements ServiceConnection{
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("调用服务里面的方法");
c = (Call) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
}
}
}
service代码例如以下:
public class MyService extends Service {
@Override
public IBinder onBind(Intent intent) {
System.out.println("服务被成功绑定了");
return new Call();
}
@Override
public void onCreate() {
System.out.println("onCreate");
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
System.out.println("onstartCommand");
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
System.out.println("ondestroy");
super.onDestroy();
}
public void methodInService(){
Toast.makeText(this, "methodInService", 0).show();
}
public class Call extends Binder{
public void callMethodInService(){
methodInService();
}
}
}
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.servicelife.MainActivity" >
<Button android:onClick="bind"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="start"/>
<Button android:onClick="unbind"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="end"/>
<Button android:onClick="call"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="调用服务里的方法"/>
</LinearLayout>
安卓服务(Service)的两种开启方式以及服务的生命周期的更多相关文章
- Service的两种启动方式
今天又写Service,提示覆写onBind(),想起Android好像是有个叫做Binder的IPC机制. Service里面有一个onBind(),一个onStartCommand(),两者都能启 ...
- Android四大组件之服务的两种启动方式详解
Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...
- XFire构建服务端Service的两种方式(转)
XFire构建服务端service的两种方式,一是用xfire构建,二是和spring集成构建. 一,xifre构建,确保把xfire的jar包导入到工程中或classpath. 1,service的 ...
- XFire构建服务端Service的两种方式
1.原声构建: 2.集成spring构建 http://blog.csdn.net/carefree31441/article/details/4000436XFire构建服务端Service的两种方 ...
- 三,memcached服务的两种访问方式
memcached有两种访问方式,分别是使用telnet访问和使用php访问. 1,使用telnet访问memcacehd 在命令提示行输入, (1)连接memcached指令:telnet 127. ...
- Service的两种用法及其生命周期
先来一点基础知识: Service 是android的四大组件之一,与Activity同属于一个级别,它是运行在后台进行服务的组件(例如在后台播放的音乐,播放音乐的同时并不影响其他操作).Servic ...
- 探究Redis两种持久化方式下的数据恢复
对长期奋战在一线的后端开发人员来说,都知道redis有两种持久化方式RDB和AOF,虽说大家都知道这两种方式大概运作方式,但想必有实操的人不会太多. 这里是自己实操两种持久化方式的一点点记录. 先看以 ...
- Android中BroadcastReceiver的两种注册方式(静态和动态)详解
今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...
- WCF 客户端调用服务操作的两种方法
本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...
随机推荐
- ubuntu查看命令
以非root用户更新系统 sudo: sudo是linux系统管理指令,是允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等.这样不仅减少了root用 ...
- Maven、gradle、Ant、Eclipse IDE
Maven.gradle.Ant.Eclipse IDE之间的关系 http://wenku.baidu.com/view/d33208810912a21615792910.html?from=sea ...
- 1494. Monobilliards(栈)
1494 之前记得数据结构试卷上有这种题 就是判断某一出栈顺序 是不是满足以1.2...n为入栈顺序 a1,a2,a3..an; 对于任意相邻a[i],a[i+1] 如果a[i]>a[i+1]+ ...
- [原]Unity3D深入浅出 - 物理引擎之刚体部件(Rigidbody)
在虚拟世界中,任何物体都是没有活力的,要想变的真实,Rigidbody是必不可少的组件,下面介绍Rigidbody的各个属性: Mass:质量 Drag:阻力,对象在运动时遇到的空气阻力,0表示没有空 ...
- Sencha 基础Demo测试,三种showView的方法
直接贴代码吧 Ext.define("build.controller.MainController",{ extend:"Ext.app.Controller" ...
- UVa 10214 (莫比乌斯反演 or 欧拉函数) Trees in a Wood.
题意: 这道题和POJ 3090很相似,求|x|≤a,|y|≤b 中站在原点可见的整点的个数K,所有的整点个数为N(除去原点),求K/N 分析: 坐标轴上有四个可见的点,因为每个象限可见的点数都是一样 ...
- SCOI2009生日快乐
竟然是搜索……囧 还以为是什么神题…… uses math; var x,y:extended; n:longint; function find(x,y:extended;z:longint):ex ...
- asp.net(vs2005) + Sql2000 缓存依赖
1.开启数据库缓存依赖支持 开始,运行,cmd 输入 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql -S localhost ...
- Windows安装weblogic
WebLogic安装结束 以下是进入MyEclipse启动配置WebLogic
- Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别?
一个帖子的整理: Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别如果你不带参数的实例化:Handler ...