Android之Service相关
来源:互联网 发布:长城网络还原大师 编辑:程序博客网 时间:2024/05/15 15:39
(一)Service介绍和注意事项
Service,后台运行,可交互这样的一个东西。它跟Activity的级别差不多,但是他不能自己运行,需要通过某一个Activity或者其他Context对象来调用, Context.startService() 和 Context.bindService()。
两种启动Service的方式有所不同。这里要说明一下的是如果你在Service的onCreate或者onStart做一些很耗时间的事情,最好在 Service里启动一个线程来完成,因为Service是跑在主线程中,会影响到你的UI操作或者阻塞主线程中的其他事情。
什么时候需要Service呢?比如播放多媒体的时候用户启动了其他Activity这个时候程序要在后台继续播放,比如检测SD卡上文件的变化,再或者在后台记录你地理信息位置的改变等等,总之服务嘛,总是藏在后头的。
Service在android当中是一个比较重要的构件,她只在后台工作,没有Context。而且他也不是一个独立的线程,而是和main用一个线程。在service中可以直接使用Toast进行一些信息的提示。
但要注意,如果直接在service中直接启动另一个Activity则会出错。原因是没有设置flag,即在声明Intent的时候要设置flag:intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)。下面给出一个例子:
public class backgroundServer extends Service{
...
public void startMyActivity(){
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(backgroundServer.this, myActivity.class);
startActivity(i);
}
...
}
这样就可以启动MyActivity了。(注意不要在AndroidManifest.xml中注册该Activity)
(二)Service生命周期
Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。
1 通过startService
Service会经历 onCreate -> onStart
stopService的时候直接onDestroy
如果是调用者(TestServiceHolder)自己直接退出而没有调用stopService的
话,Service会一直在后台运行。
下次TestServiceHolder再起来可以stopService。
2 通过bindService
Service只会运行onCreate, 这个时候 TestServiceHolder 和TestService绑定在一起
TestServiceHolder 退出了,Srevice就会调用onUnbind->onDestroyed
所谓绑定在一起就共存亡了。
要是这几个方法交织在一起的话,会出现什么情况呢?
一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又 bindService,Service只被创建一次。如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,对啊,就是stopService不好使了,只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。
- Android之Service相关
- Android 之 Service 相关知识
- android service相关
- Android的Service相关
- Android Service 相关
- Android Service相关知识
- Android service组件相关
- android service 相关问题汇总
- android Service 之Bound Service
- Android Service 之Bound Service
- android Service 之Bound Service
- android Service 之Bound Service
- Android基本之Service
- Android 之 service
- Android学习之Service
- Android Service 之 AIDL
- android之Service
- android组件之Service
- oracle nchar cx_Oracle
- 随记
- POJ 1274The Perfect Stall (最大流实现)
- SELECT INTO 和 INSERT INTO SELECT 两种表复制语句
- RMAN命令详解
- Android之Service相关
- 依赖的类型
- firebird sql 常用语句
- Oracle 学习笔记-事务
- 怀念外婆
- 关于“此程序集中已使用了资源标识符 "Test.Searchn.resources”问题的解决办法
- SQL server中性能优化
- 分辨率
- Altium使用技巧--持续更新