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!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

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

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...