设为首页 加入收藏

TOP

Android中的service 实现之 利用onStart方式
2014-11-24 11:20:26 来源: 作者: 【 】 浏览:0
Tags:Android service 实现 利用 onStart 方式

service的实现主要有两种方式,一种是onStart方式,另一种是onBoundd方式。两种方式的关于service的生命周期不一样。前者是和activity的生命周期一样的,后者则不是。activity结束了service可以继续运行。


onStart 方法来调用service的话,调用者其实和service是没有关系的,调用者消亡了的话,service是依然可以继续运行的;


onBound方式的话调用者和service是绑定在一起的,调用者消亡的了话,service也会跟着消亡了。


onStart 方法的创建的service一开始是onCreate 然后调用onStartCommand() (在老的版本中是onStart()函数,新版本中调用onStartCommand的话还是会去调用onStar方法,建议使用onStartCommand方式)。如果该service不stop的话,再点的话一直会是onstar相应,onCreate只有在第一次启动的时候会调用。


下面的例子:


有两个按钮:一个启动service,另一个停止service。具体实现如下:


1)ServiceText1.java


用于调用sercice程序:


代码:



2)service.java,实现的service



3)ServiceText1.java



main.xml文件:



截图:





这里补充一点知识:


stop service 有两种方法:
1.使用调用程序来停止一个service :即调用stopService();
2.使用service 本身来停止一个service:即调用stopSelf(int srvId);
我们来想象一个场景:
如果service被很多的程序并发调用的话,如果在某个程序里你调用了stopService();那么第二个程序来调用的时候service的服务已经关掉了,这样你又得去重新onCreate()下service,如果量大的话,开销将是很大的。那么怎么办呢?
推荐的方式就是第二种了。stopSelf(int srvId),参数是srv的id,该id在startCommand的时候创建,stopSelf(int srvId)执行的时候会发送id给startCommand(),匹配所关掉服务的id是否匹配,这样如果某个启动服务的程序结束之前另一个线程也调用了startCommand(),这样前面一个程序就无法使用stopSelf(int srvId)来关闭service了。因为id已经变更了。这样就可以节约开销。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇底层之旅 —— Linux下的I2c体系.. 下一篇Android Service 之Bound Service

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·怎样用 Python 写一 (2025-12-27 02:49:19)
·如何学习python数据 (2025-12-27 02:49:16)
·想要自学数据分析, (2025-12-27 02:49:14)
·Java 集合框架 - 菜 (2025-12-27 02:19:36)
·Java集合框架最全详 (2025-12-27 02:19:33)