zoukankan      html  css  js  c++  java
  • 《第一行代码》学习笔记38-服务Service(5)

    1.希望服务一旦启动就立刻去执行某个动作,可以将逻辑写在onStartCommand()方法里。

    2.onCreate()和onStartCommand()的区别:onCreate()方法是在服务第一次创建时调用的,而onStartCommand()方
    法在每次启动服务时都会调用。

    3.调用bindService()方法将MainActivity和MyService进行绑定,bindService()方法接收三个参数,第一个是刚刚创建的
    Intent对象;第二个是前面创建出的ServiceConnection实例;第三个是一个标志位,这里传入BIND_AUTO_CREATE表示
    在活动和服务进行绑定后自动创建服务。会使得MyService中的onCreate()方法得到执行,但onStartCommand()方法不会
    执行。

    4.服务的生命周期:onCreate(), onStartCommand, onBind() 和 onDestroy()等方法都是在服务的生命周期内可能回调的方法。

    5.虽然每调用一次startService()方法,onStartCommand()就会执行一次,但实际上每个服务都只会存在一个实例。故不管调用
    了多少次startService()方法,只需要调用一次stopService()或stopSelf()方法,服务就会停下来。

    6.根据Android系统的机制,一个服务只要被启动或者被绑定之后,就会一直处于运行状态,必须要让以上两种条件同时不满足,
    服务才能被销毁。所以,这种情况下要同时调用stopService()和unbindService()方法,onDestroy()方法才会执行。

    7.服务的系统优先级比较低,系统出现内存不足的情况时,有可能会回收掉正在后台运行的服务。

    8.考虑前台服务,该服务和普通服务最大的区别在于,会一直有一个正在运行的图标在系统的状态栏显示,下拉状态栏后可以
    看到更加详细的信息,非常类似于通知的效果。eg.有些项目由于特殊的需求会要求必须使用前台服务,如墨迹天气,其服务
    在后台更新天气数据的同时,还会在系统状态栏一直显示当前的天气信息。

    9.关于前台服务的核心代码:

    Notification.Builder builder = new Notification.Builder(MyService.this);
            Intent intent = new Intent(this, MainActivity.class);
            PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
    
            builder.setSmallIcon(R.mipmap.ic_launcher);
            builder.setTicker("Notification comes");
            builder.setWhen(System.currentTimeMillis());
            builder.setAutoCancel(true);
            builder.setContentTitle("This is content title");
            builder.setContentText("This is content text");
            Notification n = builder.build();
            builder.setContentIntent(pi);
            
            startForeground(1, n);
    

    10.服务中的代码都是默认运行在主线程中的,若直接在服务中去处理一些耗时的逻辑,会很容易出现ANR(Application Not Responding)
    的情况,故用到Android多线程编程技术,在服务的每个具体的方法里开启一个子线程,然后在这里去处理那些耗时的逻辑。

    11.IntentService集开启线程和自动停止于一身,得到了众多程序员的喜爱。

  • 相关阅读:
    b_lg_选学霸(并查集+01背包)
    b_lq_小明的魔法(反向思维)
    多测师课堂019_第一个月综合面试题(01) _高级讲师肖sir
    多测师课堂017_项目数据 _高级讲师肖sir
    linux whoami 显示当前用户的用户名
    linux shutdown 命令 关机 重启
    linux reboot 重启命令
    linux基础 目录
    linux uname 命令 打印系统信息
    前端 CSS层叠性 CSS选择器优先级
  • 原文地址:https://www.cnblogs.com/Iamasoldier6/p/5048737.html
Copyright © 2011-2022 走看看