(一)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行为是有区别的。

更多相关文章

  1. Android应用启动慢的问题
  2. 关于overridePendingTransition效果在1.6版本中会出现VerifyErro
  3. Android(安卓)adb启动任意app的几种方式
  4. Android:Activity(九):Fragment管理与Fragment事务
  5. Android——SharedPreferences数据存储
  6. Android中间层c语言log打印方法
  7. Xamarin.Forms QR Code Scan 二维码扫描的Android(安卓)App
  8. Android设置程序最小运行的堆内存
  9. android device 注册、添加、管理

随机推荐

  1. Android(安卓)核心分析 之八------Androi
  2. Android中的消息机制:Handler消息传递机制
  3. Android中的多媒体编程-黄俊东-专题视频
  4. 开发具备语音识别功能的 Android* 应用
  5. android 屏幕自适应
  6. 【Android布局】在程序中设置android:gra
  7. android的Instrumentation详解
  8. Android在Eclipse环境下安装配置
  9. Android中横竖屏切换的问题
  10. Android(安卓)应用程序之间数据共享—Con