zoukankan      html  css  js  c++  java
  • android service笔记

    1、service 默认在主线程运行,所以不能在service中直接做访问网络,操作文件等耗时操作,要另外开启线程

    2、通过startservice开启的服务,一旦服务开启,这个服务和开启他的调用者之间就没有任何的关系了,调用者不可以访问 service里面的方法,调用者如果被系统回收了或者调用了ondestroy方法,service还会继续存在

    3、通过bindService开启的服务,服务开启之后,调用者和服务之间还存在着联系,一旦调用者挂掉了,service也会跟着挂掉

    4、service中可以使用 Toast

    5、IntentService是自带一个线程的Service,可以自己关闭,一般用于完成后自动关闭的单线程工作任务

    6、Service与Activity之间数据交互三种方式:

    一,如果Activity调用Service的方法后能获取返回值,那Activity想什么时候从Service中获取信息就什么时候调用Service中的方法。但是,这种方法有局限性,因为Activity不知道Service中的信息什么时候更新,不能被动的接收信息。

    二,利用广播接收者可以解决方法1的局限性,当Service中信息有更新时就发送一个广播到Activity中,Activity中注册一个广播接收者来接收广播,以此来更新Activity中的信息。但是有个疑问,假设频繁的发送广播会不会资源消耗大。

    三,写一个回调接口
    具体步骤如下:
    1.先写一个用来做回调的接口
        public interface ICount {
            void count(int val);
        }
    2.Service类
        public class CountService extends Service {
            private int val = 0;

            public void startCount(ICount iCount){ // 调用CountActivity,因为CountActivity实现了ICount
                // do something ...
                val ++;
                iCount.count(val);
            }
        }
    3.Activity类
    注:省略了绑定CountService的代码
        public class CountActivity extends Activity implements ICount {
            @Override
            protected void onCreate(){
                // do something ...
                startCount(this); // 调用CountService对象的startCount()方法,并把自己传了进入,这样的话CountService对象就能调用自己的方法了
            }

            @Override
            void count(int val){
                // update UI
            }
        }

    7、binder可以通过调用transact来从activity发送数据到service,并从service返回数据

    8、Service粘性和非粘性

    启动service又分为粘性和非粘性:
    (1)粘性service:关不掉,由于内存紧张关闭后会重新复活
    (2)非粘性service:死了就死了。
    区分粘性和非粘性的区别是:看onStartCommand的返回值。
    如果在为返回之前系统崩溃,则不存在粘性和非粘性。
    非粘性 :返回值是START_NOT_STICKY 系统杀死,再启动需要自己起startService
    粘性:返回值START_STICKY 服务死了之后自己起,但是不是调用startSerivce,而是直接调用service的startCommand方法,所有传过来的intent为null.
    返回值START_REDELIVER_INTENT: 死了之后系统自己起,但还是会传过来最后一个intent(由于最后一个导致死亡的,所以再传这个intent可能还会死亡,但是死了四五次就不会再自动启动了。)

    9、进程间可以通过Messager进行通信

    10、AIDL demo: http://git.oschina.net/atwal/androidAidlDemo

  • 相关阅读:
    第五周作业
    第四周作业
    第三周作业
    第二周作业
    Linux常用命令使用格式及实例
    总结linux哲学思想
    配置环境变量,实现执行history的时候可以看到执行命令的时间
    安装Centos7.6操作系统后,创建一个自己名字的用户名,并可以正常登陆
    各系列的Linux发行版及不同发行版之间的联系与区别
    python2使用Tkinter制作GUI内嵌matplotlib时,找不到NavigationToolbar2Tk的问题
  • 原文地址:https://www.cnblogs.com/lurenjiashuo/p/android-service-tips.html
Copyright © 2011-2022 走看看