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
android service笔记的更多相关文章
- 【转】 Pro Android学习笔记(七七):服务(2):Local Service
目录(?)[-] Local service代码 调用Local ServiceLocal Service client代码 AndroidManifestxml定义Serviceacitivty的l ...
- Android开发笔记--hello world 和目录结构
原文:Android开发笔记--hello world 和目录结构 每接触一个新东西 都有一个hello world的例子. 1.新建项目 2.配置AVD AVD 没有要新建个,如果不能创建 运行SD ...
- 【转】Android开发笔记(序)写在前面的目录
原文:http://blog.csdn.net/aqi00/article/details/50012511 知识点分类 一方面写写自己走过的弯路掉进去的坑,避免以后再犯:另一方面希望通过分享自己的经 ...
- udacity android 实践笔记: lesson 4 part b
udacity android 实践笔记: lesson 4 part b 作者:干货店打杂的 /titer1 /Archimedes 出处:https://code.csdn.net/titer1 ...
- Android进阶笔记:Messenger源码详解
Messenger可以理解为一个是用于发送消息的一个类用法也很多,这里主要分析一下再跨进程的情况下Messenger的实现流程与源码分析.相信结合前面两篇关于aidl解析文章能够更好的对aidl有一个 ...
- Android进阶笔记:AIDL内部实现详解 (二)
接着上一篇分析的aidl的流程解析.知道了aidl主要就是利用Ibinder来实现跨进程通信的.既然是通过对Binder各种方法的封装,那也可以不使用aidl自己通过Binder来实现跨进程通讯.那么 ...
- Android Service 服务(三)—— bindService与remoteService
(转自:http://blog.csdn.net/ithomer/article/details/7366396) 一.bindService简介 bindService是绑定Service服务, ...
- [置顶] Android开发笔记(成长轨迹)
分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...
- 【转】 Pro Android学习笔记(八十):服务(5):访问远程服务
目录(?)[-] Client的AIDL文件 Client的代码 建立连接 请求服务 断开连接 文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://bl ...
随机推荐
- HDU 3613 扩展KMP
暴力枚举大水题,判断回文,扩展KMP #include <cstdio> #include <cstring> #include <algorithm> using ...
- HDU 1298 T9【字典树增加||查询】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=1298 T9 Time Limit: 2000/1000 MS (Java/Others) Memo ...
- js和.net操作Cookie遇到的问题
Cookie初探1.我理解中的Cookie1.1.Cookie存储位置是客户端的1.2.Cookie存储数据,数据大小也是有限制的 2.Cookie的用法2.1.js对Cookie的操作(网上很多我就 ...
- jquery 跨域获取网页数据
<script language="javascript" src="http://cbsahhs.blog.163.com/jquery.min.js" ...
- LinQ 简介
LinQ是3.0新加的语法.用起来比较方便,我们可以使用较简单的方法来过滤数据和处理数据. 使用场景: 可以看到LINQ使用场景还是很多的.现在写项目基本都会用到. 在出现委托之前,我们来查找对象 在 ...
- Unity3d在各个平台读取Sqlite3数据库
这也是我第一次在Unity3d中使用Sqlite来作为配置表文件,当然了,SQLite有优秀的读写性能. 如果这个项目用着稳定的话,我会一直使用下去. Android平台: 1,下载libsqlite ...
- vue2.0移除或更改的一些东西
一.vue2.0移除了$index和$key 虽然说现在很多文章说他们的代码是vue2.0版本的,但是有一些仔细一看,发现并不全是2.0版本,有些语法还是1.0的版本,比如这个$index,$key, ...
- Python 学习笔记(三)数字
Python 数字 int 整型 是正或负整数 2 long 长整型 整数最后是一个大写或小写的L 2L float 浮点型 由整数部分和小数部分组成 2.0 complex 复数 小 ...
- js中判断数组中是否包含某元素的方法
方法一:array.indexOf(item,start):元素在数组中的位置,如果没与搜索到则返回 -1. 参数 描述 item 必须.查找的元素. start 可选的整数参数.规定在数组中开始检索 ...
- javaweb--json--ajax--mysql实现省市区三级联动(附三级联动数据库)
在web中,实现三级联动很常见,尤其是利用jquery+json.但是从根本上来说jquery并不是最能让人容易理解的,接下来从最基本的javascript开始,实现由javascript+json+ ...