zoukankan      html  css  js  c++  java
  • Service

    1.Service是一个应用程序组件(component),与Activity,BroadcastReceiver在一个层次;

    2.Service没有图形界面;

    3.通常用来处理一些耗时较长的操作(下载,播放音乐..),如果用BroadcastReceiver处理超过10s的操作通常会报错;

    4.可以使用Service更新ContentProvider,发送Intent以及启动系统的通知等等

    &

    1.Service不是一个单独的进程

    2.Service不是一个单独的线程

    所以service和整个程序是在同一个进程和线程中运行的。

    进程拥有独立的内存空间以及一些资源,一个进程里面可以包含多个线程(至少一个),一个应用程序最少有一个进程。

    对于多个线程,CPU采用时间片调度算法使得线程之间不停快速切换,使我们感觉程序好像在同时运行。

    生命周期:

    注:Android2.0以后的版本,onStart()已经被onStartCommand()代替了

    Service与Activity一样,也有一个从启动到销毁的过程,但Service的这个过程比Activity简单得多。Service启动到销毁的过程只会经历如下3个阶段:

    创建服务

    开始服务

    销毁服务

    一个服务实际上是一个继承android.app.Service的类,当服务经历上面3个阶段后,会分别调用Service类中的3个事件方法进行交互,这3个事件方法如下:

    1. public void onCreate(); // 创建服务
    2. public void onStart(Intent intent, int startId); // 开始服务
    3. public void onDestroy(); // 销毁服务

    一个服务只会创建一次,销毁一次,但可以开始多次,因此,onCreate和onDestroy方法只会被调用一次,而onStart方法会被调用多次。

    例如,我在onCreate()写了一个toast:

    Toast.makeText(context, "it's oncreate()", Toast.LENGTH_LONG).show();

    用短信触发这个Service,在这个程序没有运行的时候,用短信触发之后,toast显示了“it's oncreate()”,

    然而再次尝试用短信触发这个程序的时候,不再显示了,因为这个程序在后台运行了,service已经被启用。

    当我们把这个程序kill掉之后,则可以重新通过短信触发oncreate里的toast。

    而如果在onStartCommand()里面写一个toast:

    Toast.makeText(context, "it's onStartCommand()", Toast.LENGTH_LONG).show();

    那么每次用短信触发的时候就都会出现"it's onStartCommand()"的toast,不会出现只toast一次的情况。

    注意这个toast要写在return语句的前面,不然报错,return后面好像是不能写字的。

    LINKS:

    BroadcastReceiver调用Service:

    http://www.cnblogs.com/larrylawrence/p/3421629.html

  • 相关阅读:
    猜数游戏
    计算数组长度
    python 将IP地址转换成打包后的32位格式
    nutch-2.2.1 hadoop-1.2.1 hbase-0.92.1 集群部署
    Julien Nioche谈Apache Nutch 2的特性及产品路线图
    一次心惊肉跳的服务器误删文件的恢复过程
    Http长连接200万尝试及调优
    zookeeper 系列
    Enhancing the Scalability of Memcached
    linux杂谈(十八):DNS服务器的配置(一)
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3420896.html
Copyright © 2011-2022 走看看