• 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

  • 相关阅读:
    T-Pot平台Honeytrap蜜罐TCP/UDP服务攻击探测及实现自动化邮件告警
    Linux判断文件是否为空,不为空则打印该文件的大小
    Linux好用的工具命令
    T-Pot平台cowrie蜜罐暴力破解探测及实现自动化邮件告警
    python工具
    python文件的基础操作
    python实现合并两个文件并打印输出
    python打开文件的N种姿势
    python工具
    python列表中元素插入位置总结
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/3420896.html
Copyright © 2020-2023  润新知