Android提供Service组件用来处理耗时的操作,不需要用户界面

  次阅读 来源:互联网(转载协议) 2016-01-13 22:22 我要评论(0)

Android提供Service组件用来处理耗时的操作,不需要用户界面。

Service组件的优先级比不活跃的Activity高,这样被系统杀死的概率就降低了。当然,实际上即便运行中的Service被杀,但是当系统资源又足够的时候,Service又会被重启。

当必要的时候Service的优先级可能被提到与前台Activity相同的优先级(通过组件的标签)。这是极端的例子,当结束掉Service会直接影响用户体验的时候,比如音乐的播放被打断。

尽管Service跑起来不需要UI,但是它仍然在UI线程中执行。所以有些耗时的操作你需要放在其他的工作线程中,比如Thread和AsynTask类等。

介绍Service

Service主要做来:网络查询,处理数据,更新Content Provider,firing Intents,和触发Notification,主要做来处理耗时的操作。

若创建的Service只由自己的APP操纵,那么需要增加权限:

<service android:enabled= true

android:name= .MyService

android:permission= com.paad.MY_SERVICE_PERMISSION />

onStartCommand可能会被多次调用,当使用startService的时候触发。通过stopService或者stopSelf停止服务。

@Override

public int onStartCommand(Intent intent, int flags, int startId) {

startBackgroundTask(intent, startId);

return Service.START_STICKY;

}

onStartCommand返回的参数是用来决定:当系统在Service运行时杀死了Service,资源足够的时候又重启这个Service,系统该如何回应。

下面介绍这个返回值:

1.START_STICKY 代表标准的行为。如果返回的是这个值,当Service任何时候的重启,onStartCommand都会被调用。当是注意的一点:传来的intent参数会丢失,也就是null。

2.START_NOT_STICKY 当运行时被杀死的时候,如果之前还有start请求未处理(注意是未处理,而不是处理中),Service才会被重启,否则服务自动停止。

3.START_REDELIVER_INTENT 如果Service在运行中被杀死,如果还有请求未被处理,或者在处理中。在后者情况,onStartCommand会被调用,传入之前传入的初始状态的Intent,因为它认为还没有完全处理好。

注意:以上行为只有在System kill event的情况下有效,stopSelf和stopService都不会过问onStartCommand的返回状态。

下面2个参数是用来判断你的Service是怎么启动的:

1.START_FLAG_REDELIVERY对应着START_REDELIVER_INTENT

2.START_FLAG_RETRY ------START_STICKY

启动和停止Service

显式和隐式启动:

private void explicitStart() {

// Explicitly start My Service

Intent intent = new Intent(this, MyService.class);

// TODO Add extras if required.

startService(intent);

}

private void implicitStart() {

// Implicitly start a music Service

Intent intent = new Intent(MyMusicService.PLAY_ALBUM);

intent.putExtra(MyMusicService.ALBUM_NAME_EXTRA,United );

intent.putExtra(MyMusicService.ARTIST_NAME_EXTRA,Pheonix );

startService(intent);

}

显式和隐式停止:

// Stop a service explicitly.

stopService(new Intent(this, MyService.class));

// Stop a service implicitly.

Intent intent = new Intent(MyMusicService.PLAY_ALBUM);

本站部分文章来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

网友点评网友点评
阅读推荐阅读推荐

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...