安卓中服务的开启方式

一:採用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)的两种开启方式以及服务的生命周期的更多相关文章

  1. Service的两种启动方式

    今天又写Service,提示覆写onBind(),想起Android好像是有个叫做Binder的IPC机制. Service里面有一个onBind(),一个onStartCommand(),两者都能启 ...

  2. Android四大组件之服务的两种启动方式详解

    Service简单概述 Service(服务):是一个没有用户界面.可以在后台长期运行且可以执行操作的应用组件.服务可由其他应用组件启动(如:Activity.另一个service).此外,组件可以绑 ...

  3. XFire构建服务端Service的两种方式(转)

    XFire构建服务端service的两种方式,一是用xfire构建,二是和spring集成构建. 一,xifre构建,确保把xfire的jar包导入到工程中或classpath. 1,service的 ...

  4. XFire构建服务端Service的两种方式

    1.原声构建: 2.集成spring构建 http://blog.csdn.net/carefree31441/article/details/4000436XFire构建服务端Service的两种方 ...

  5. 三,memcached服务的两种访问方式

    memcached有两种访问方式,分别是使用telnet访问和使用php访问. 1,使用telnet访问memcacehd 在命令提示行输入, (1)连接memcached指令:telnet 127. ...

  6. Service的两种用法及其生命周期

    先来一点基础知识: Service 是android的四大组件之一,与Activity同属于一个级别,它是运行在后台进行服务的组件(例如在后台播放的音乐,播放音乐的同时并不影响其他操作).Servic ...

  7. 探究Redis两种持久化方式下的数据恢复

    对长期奋战在一线的后端开发人员来说,都知道redis有两种持久化方式RDB和AOF,虽说大家都知道这两种方式大概运作方式,但想必有实操的人不会太多. 这里是自己实操两种持久化方式的一点点记录. 先看以 ...

  8. Android中BroadcastReceiver的两种注册方式(静态和动态)详解

    今天我们一起来探讨下安卓中BroadcastReceiver组件以及详细分析下它的两种注册方式. BroadcastReceiver也就是"广播接收者"的意思,顾名思义,它就是用来 ...

  9. WCF 客户端调用服务操作的两种方法

    本节的主要内容:1.通过代理类的方式调用服务操作.2.通过通道的方式调用服务操作.3.代码下载 一.通过代理类的方式调用服务操作(两种方式添加代理类) 1.手动编写代理类,如下: 客户端契约: usi ...

随机推荐

  1. poj 3083 Children of the Candy Corn(DFS+BFS)

    做了1天,总是各种错误,很无语 最后还是参考大神的方法 题目:http://poj.org/problem?id=3083 题意:从s到e找分别按照左侧优先和右侧优先的最短路径,和实际的最短路径 DF ...

  2. poj 2524 Ubiquitous Religions (并查集)

    题目:http://poj.org/problem?id=2524 题意:问一个大学里学生的宗教,通过问一个学生可以知道另一个学生是不是跟他信仰同样的宗教.问学校里最多可能有多少个宗教. 也就是给定一 ...

  3. poj1948

    很容易想到dp,f[i,j,k]表示到第i根木棒所组成三条边中两条边长为j,k是否存在 之后找所有满足三角形形成条件的三条边,然后找最大: 但: 如果你朴素的写,很有可能超时,事实上,只要加一些常数优 ...

  4. UVa 540 (团体队列) Team Queue

    题意: 每个人都属于一个团体,在排队的时候,如果他所在的团体有人在队伍中,则他会站到这个团体的最后.否则站到整个队伍的队尾. 输出每次出队的人的编号. 分析: 容易看出,长队中,在同一个团体的人是排在 ...

  5. 也用 Log4Net 之走进Log4Net (四)

    转载地址:http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html 我是转的别人的内容,我觉得他写的非常好,所以我把其中三分之二转了过来 ...

  6. 我的web小游戏【持续更新中】

    在谷歌浏览器中实测无问题.. 五子棋(双人对战):http://1.waymongame.sinaapp.com/wuziqi/wuziqi2.html 贪吃蛇:http://1.waymongame ...

  7. [Everyday Mathematics]20150102

    设 \[ a_1=3,\quad a_{n+1}=\dfrac{1}{2}(a_n^2+1)\quad(n=1,2,\cdots). \] 试求 \[ \vsm{n}\dfrac{1}{1+a_n}. ...

  8. H5制作1--母亲节快乐

    H5作品现在很流行额. 早上起的很早.就自己试着去了解了一下.感觉很easy. 用了百度的H5在线制作工具.感觉很easy.顺便给百度做下推广吧.h5.baidu.com 于是就有了自己的第一个dem ...

  9. tomcat 容器中的UML架构图

  10. Magento 切换成中文后没有数据信息解决办法

    进入后台的, 选择CMS---pages, 看到这个么? 如果这里显示的不是所有商店界面的话, 就点击进去,然后选择所有商店界面: 如下所示: 再点击保存就可以了.