Service笔记(Sundy课程)

Service不是一个独立的线程(进程)

启动服务后,按Home,服务还会继续运行
启动服务后,退出进程,服务不会继续运行
启动服务,不用多线程,界面会阻塞.如在一个Activity中点击一个按钮,启动一项服务.该service在100秒的时间内不停地用Log进行信息的输出.
此时我们按返回键,或者多次联系按返回键,将导致ANR错误.
但是我们在服务中新开启一个线程来用Log进行信息的输出,就不会导致ANR错误.

由于startService()通常只启动,不需要返回值,所以可用来操作网络上传或者下载,操作完成后,自动停止


startService()启动服务,若在服务的public void onCreate()方法里开启一条线程做一些操作
这时候有这么一个问题:虽然我们使服务终止了,服务的onDestroy()方法也执行了,但是此线程还是在继续工作……………………

不但此问题,有时候发现service莫名其妙的阻塞.
于是android系统引入了IntentService:主要用来执行异步请求,里面也使用了Handle


另外的一个问题:
Service运行在后台,优先级较低,当内存不足的时候,系统会杀死服务.
解决办法:把service运行在前台
方法:startForeground (int id, Notification notification)

知识点:
native service(内部为C++)
当startService()和bindService都不好使的时候而且需要这个服务长期运行在后台的时候,可以调用此方法.
调用此方法需用到NDK是开发C++的插件.
但Java如何调用C++写好的类库呢???答:通过JNI(java native interface即java的原生接口)

Service和线程的选择
在当前操作要启动一个更加独立的操作的时候,可以调用线程.比我就是需要下载一个东西.


Stub是一个指针,指向了指向内存块的指针即Stub为指针的指针

上一篇:NHibernate初探(六) 一对多关系级联操作


下一篇:汇编语言基础教程-数据类型